๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1213)
< ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ >
๋ฌธ์ ํ์ด
ํฐ๋ฆฐ๋๋กฌ์ด ๊ฐ๋ฅํ์ง ํ์ธํ๊ธฐ ์ํด ์ฃผ์ด์ง ๋ฌธ์์ด์์ ๊ฐ ์ํ๋ฒณ ๊ฐ์๋ฅผ ์ผ๋ค.
์ง์์ผ ๋ ๊ฐ ์ํ๋ฒณ์ด ํ์๊ฐ๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ค. ๋ํ, ํ์์ผ ๋ ๊ฐ ์ํ๋ฒณ์ด ํ์๊ฐ๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ค. ์ด ์กฐ๊ฑด์ ๋จผ์ ํ์ธํด ์ค๋ค.
์์ ์กฐ๊ฑด์ ํต๊ณผํ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค์ด์ค๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class _1213_ { // ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = bf.readLine();
HashMap<Character, Integer> map = new HashMap<>();
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
char x = str.charAt(i);
if (!map.containsKey(x)) {
map.put(x, 1);
list.add(x);
} else {
map.replace(x, map.get(x) + 1);
}
}
Collections.sort(list);
boolean flag = false;
char a = ' ';
boolean result = false;
for (char x : map.keySet()) {
if (map.get(x) % 2 != 0) {
if (!flag) {
flag = true;
a = x;
} else {
result = true;
break;
}
}
}
if (str.length() % 2 == 0 && flag) {
result = true;
}
String answer = "";
if (!result) {
char arr[] = new char[str.length()];
int front = 0, back = str.length() - 1;
for (char x : list) {
while (map.get(x) > 1) {
arr[front++] = x;
arr[back--] = x;
map.replace(x, map.get(x) - 2);
}
}
if(str.length()%2!=0) {
arr[front] = a;
}
for (char x : arr) {
answer += x;
}
}
if (result) {
System.out.println("I'm Sorry Hansoo");
} else {
System.out.println(answer);
}
}
}
Main
๋ณ์)
str : ์์ด ์ด๋ฆ
map : ๊ฐ ์ํ๋ฒณ ๊ฐ์
list : ์กด์ฌํ๋ ์ํ๋ฒณ
flag : ํ์๊ฐ์ ์ํ๋ฒณ์ด ์๋์ง ์ฌ๋ถ
a : ํ์๊ฐ ์ํ๋ฒณ
result : ํ์๊ฐ์ ์ํ๋ฒณ์ด 2๊ฐ ์ด์์ธ์ง ์ฌ๋ถ
answer : ์ ๋ต
arr : ํฐ๋ฆฐ๋๋กฌ ์ ๋ต ๋ฐฐ์ด
front, back : arr ๋ฐฐ์ด index
- ์์ด ์ด๋ฆ(str) ์ ๋ ฅ
- ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด(str)์ ํฌํจ๋ ์ํ๋ฒณ ๊ฐ์ ์ธ๊ธฐ
- ๋ฌธ์์ด(str)์ ํฌํจ๋ ์ํ๋ฒณ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ
- ์ํ๋ฒณ ๊ฐ์ ์ผ map์ ์ํํ๋ฉด์ ํ์๊ฐ๊ฐ ์๋์ง ํ์ธ
: ํ์๊ฐ๊ฐ ํ๋ ์๋ค๋ฉด ๊ทธ ๊ฐ๋ ์ ์ฅ(a)
: ํ์๊ฐ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๋ฌธ์์ด์ ๊ธธ์ด์ ์๊ด์์ด ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์์
- ๋ฌธ์์ด(str)์ ๊ธธ์ด๊ฐ ์ง์์ด๊ณ ํ์๊ฐ์ธ ์ํ๋ฒณ์ด ์๋ค๋ฉด ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์์
- ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ ์กฐ๊ฑด์ด๋ผ๋ฉด(result)
: ์์์ ์ํ๋ฒณ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ(list) ํ ๊ฐ์ ์์๋๋ก ํ์ธํ๋ฉด์ ์ ๋ค๋ก ๊ฐ ์ฑ์ฐ๊ธฐ
: ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ํ์๋ผ๋ฉด ์์์ ์ ์ฅํด ๋ ๊ฐ(a)์ ๊ฐ์ด๋ฐ์ ์ฑ์ฐ๊ธฐ
: ๋ฐฐ์ด -> ๋ฌธ์์ด ๋ณํ
- result ์ฌ๋ถ์ ๋ฐ๋ผ ๋ถ๊ฐ๋ฅ ๋ฌธ์์ด ์ถ๋ ฅ or ํฐ๋ฆฐ๋๋กฌ ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1969_DNA (0) | 2023.09.19 |
---|---|
[Baekjoon] 2828_์ฌ๊ณผ ๋ด๊ธฐ ๊ฒ์ (1) | 2023.09.18 |
[Baekjoon] 1449_์๋ฆฌ๊ณต ํญ์น (0) | 2023.09.14 |
[Baekjoon] 1439_๋ค์ง๊ธฐ (0) | 2023.09.13 |
[Baekjoon] 1343_ํด๋ฆฌ์ค๋ฏธ๋ ธ (0) | 2023.09.11 |