- Today
- Total
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- leetcode
- OOP
- CS
- tree
- spring
- ์๋ฐ์์ ์
- ๋ฒจ๋งํฌ๋
- BFS
- java
- database
- ํ๋ก๊ทธ๋๋จธ์ค
- array
- pytorch
- ์ธํด
- ์๋ฃ๊ตฌ์กฐ
- ๊ตฌํ
- ์กธ์ ์ํ
- PS
- ๊ทธ๋ฆฌ๋
- ๋ฐฑ์ค
- ๋ค์ต์คํธ๋ผ
- dp
- ๋ฐฑ์๋
- ๋ฌธ๋ฒ
- ์๋ฐ
- Algorithm
- Graph
- ์์์ ๋ ฌ
- MST
Partially Committed
[๋ฐฑ์ค 1213] ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ JAVA (๋ฌธ์์ด, ๊ทธ๋ฆฌ๋, ๊ตฌํ) ๋ณธ๋ฌธ
[๋ฐฑ์ค 1213] ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ JAVA (๋ฌธ์์ด, ๊ทธ๋ฆฌ๋, ๊ตฌํ)
WonderJay 2023. 6. 26. 13:011213๋ฒ: ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ (acmicpc.net)
๋ฌธ์ ๋ฅผ ์์ฝํด๋ณด์.
์ํ๋ฒณ ๋๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ๋ค.
- ๊ทธ ๋ฌธ์์ด๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ค๋ฉด, ๊ฐ์ฅ ์ฌ์ ์์ผ๋ก ์์๋ ํฐ๋ฆฐ๋๋กฌ์ ์ถ๋ ฅํ๋ค.
- ๊ทธ ๋ฌธ์์ด๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋ค๋ฉด, "I'm Sorry Hansoo" ๋ฅผ ์ถ๋ ฅํ๋ค.
์ฌ๊ธฐ์ ํฐ๋ฆฐ๋๋กฌ์ด๋ ์์์๋ถํฐ ์ฝ๋ , ๋ค์์๋ถํฐ ์ฝ๋ ๋๊ฐ์ด ์ฝํ๋ ๋ฌธ์์ด์ ์๋ฏธํ๋ค. (์์: ๐ ํ ๋งํ )
๋ฌธ์์ด์ ๊ธธ์ด๋ ์ต๋ 50 ์ด๊ณ , ์๊ฐ ์ ํ์ 2์ด์ด๋ฏ๋ก ๋๋ํ๋ค.
๋ฌผ๋ก , ์ ์ฒด ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๋ฐ์ ธ๋ณด๋ฉด ์๋๋ค.
๊ธธ์ด๊ฐ n ์ธ ๋ฌธ์์ด์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฐ๋ฅํ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ ์์ด์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ๋ฉฐ, ์๊ฐ ๋ณต์ก๋๋ O(N!) ์ด๋ค. ๊ทธ๋ฆฌ๊ณ n ์ ์ต๋๋ 50 ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๋ฐ์ ธ๋ณด๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํ๋ฉด ์ข์๊น?
2 ๊ฐ์ง ํ์ด๊ฐ ์กด์ฌํ ๊ฒ ๊ฐ๋ค.
์ผ๋จ, ์๊ฐํด๋ณด๋ฉด ์ฃผ์ด์ง ๋ฌธ์์ด๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋์ง ์๋์ง๋
๊ฐ๊ฐ์ ์ํ๋ฒณ์ ๋น๋๋ฅผ ๊ณ์ฐํ๋ ๋จ๊ณ์์
ํ์ ๊ฐ์ธ ์ํ๋ฒณ์ด ๋ช ๊ฐ ์ธ์ง๊ฐ ์ค์ํ๋ค.
ํ์ ๊ฐ์ธ ์ํ๋ฒณ์ด 1 ๊ฐ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ทธ ๋ฌธ์์ด์ผ๋ก๋ ์ ๋๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค์ด๋ผ ์ ์๋ค.
"๊ฐ์ฅ ์ฌ์ ์์ผ๋ก ์์ ์ํ๋ฒณ์ ๋จผ์ ์ฌ์ฉํ๊ธฐ" ๋ผ๊ณ ํ ์ ์๊ฒ ๋ค.
์๋ฅผ ๋ค์ด,
AABBZZC
๋ผ๋ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ค๋ฉด
๋ฐฐ์ด์ด๋ ํด์ฌ๋งต ๋ฑ์ ์ํ๋ฒณ์ ๋น๋๋ฅผ ์ ์ฅํ๋ค.
A | B | Z | C |
2 | 2 | 2 | 1 |
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ฌ์ ์์ผ๋ก ์์๋๋ก ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ ๋ค.
์ด๋ฅผ ์ํด์, ์์ ๊ฐ์ด ๋น๋๋ฅผ ์ ์ฅํ ํ ์ด๋ธ์
A | B | C | Z |
2 | 2 | 1 | 2 |
์ ๊ฐ์ด ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋ ์ํ์์ ์๊ฐํด์ผ ํ๋ค.
(์ฌ์ค ์ด ๋ถ๋ถ์ ๋ฐฐ์ด๋ก ๋น๋๋ฅผ ์ ์ฅํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํด๊ฒฐ๋๋ ๋ฌธ์ ์ด๋ค.)
๊ทธ๋ฆฌ๊ณ ๋์ A->B->C->Z ์์ผ๋ก ์ํํ๋ฉด์
๊ฐ๊ฐ์ ์ํ๋ฒณ ๋น๋๊ฐ 2 ์ด์์ด๋ผ๋ฉด
Output ์ ์ ๋ค์ ํด๋น ๋ฌธ์๋ฅผ ๋ฃ์ด์ค๋ค.
์ด๋ ์ค์ํ ๊ฒ์ ์๋ฅผ ๋ค์ด A ์ ์ํ๋ฒณ ๋น๋๊ฐ 7 ์ด๋ผ๋ฉด,
AAA____AAA ์ ๊ฐ์ด ํ๋๊ฒ ์ต์ ์์ ์ฃผ์ํ๋ค.
if ๋ฌธ์ ์ฌ์ฉํ๋ฉด AB___BA ์ด๋ฐ ์์ผ๋ก ๋ง๋ค์ด ์ง ๊ฒ์ด๋ค.
์ด๋ฐ์์ผ๋ก ๋น๋ ํ ์ด๋ธ์ 1 ํ ์ํํ๊ณ ๋๋ฉด
output ๋ฌธ์์ด์ ABC_CBA ์ ๊ฐ์ ๊ฒ์ด๊ณ
๋น๋ ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
A | B | C | Z |
0 | 0 | 1 | 0 |
์๊ฐํด๋ณด๋ฉด ์ด ์์ ์์์ ๋น๋ ํ ์ด๋ธ์ ๊ฐ์ด ํญ์ 0 ๋๋ 1 ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
์ด์ ๋ค์ A->B->C->Z ์์ผ๋ก ์ํํ๋ฉด์
์ ์ฅ๋ ๊ฐ์ด 1 ์ด๋ฉด, ๋ฃ์ด์ผ ํ ์๋ฆฌ์ ํด๋น ๋ฌธ์์ด์ ๋ฃ์ด์ค๋ค.
์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด
ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์์ด์ด ๋ง๋ค์ด์ง๋ค.
์ด์ ์ถ๋ ฅํ๋ฉด ๋๋ค!
์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
String input = br.readLine();
int n = input.length();
int[] f = new int[26];
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < input.length(); i++) {
f[input.charAt(i) - 'A']++;
if (!list.contains(input.charAt(i))) {
list.add(input.charAt(i));
}
}
int odd = 0;
for (int i = 0; i < 26; i++) {
if (f[i] % 2 == 1) {
odd++;
}
}
if (odd > 1) {
bw.write("I'm Sorry Hansoo");
} else {
list.sort(Character::compareTo);
char[] output = new char[n];
int left = 0;
int right = input.length() - 1;
for (int i = 0; i < list.size(); i++) {
char nowChar = list.get(i);
while (f[nowChar - 'A'] >= 2) {
output[left++] = nowChar;
output[right--] = nowChar;
f[nowChar - 'A'] -= 2;
}
}
for (int i = 0; i < list.size(); i++) {
char nowChar = list.get(i);
if (f[nowChar - 'A'] > 0) {
output[left++] = nowChar;
f[nowChar - 'A']--;
}
}
for (int i = 0; i < output.length; i++) {
bw.write(output[i]);
}
}
bw.flush();
bw.close();
}
}
๋ ๋ฒ์งธ ํ์ด๋ ๋ณด๋ค ๊ตฌํ์ด ๊ฐ๋จํ๋ค.
ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋ค ์ ์๋์ง ์ฌ๋ถ๋ ์ฒซ ๋ฒ์งธ ํ์ด์ ๋์ผํ๋ค.
ํฐ๋ฆฐ๋๋กฌ์ ๋ง๋๋ ๊ณผ์ ์ด ์กฐ๊ธ ๋ค๋ฅด๋ค.
ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์์ด์ ๊ตฌ์ฑ์ front + mid + end ๋จ์๋ก ์ชผ๊ฐ์ ์๊ฐํ์.
์๋ฅผ ๋ค์ด, AABBZ ๋ผ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ฉด
front ๋ AB
mid ๋ Z
end ๋ BA ๊ฐ ๋์ผ ํ ๊ฒ์ด๋ค.
์ต์ข ์ ์ธ ํฐ๋ฆฐ๋๋กฌ์ front + mid + end ์ด๋ค.
end ๋ front ๋ฅผ reverse ํด์ ์ป์ ์ ์์ผ๋ฏ๋ก, front ์ mid ๋ง ๊ตฌํด๋ด๋ฉด ๋๋ค.
๊ฐ๋จํ๋ค.
์ผ๋จ ๋น๋๋ฅผ ์ ์ฅํ ํ ์ด๋ธ์ ์ฌ์ ์์ผ๋ก ์ํํ๋ค.
ํ์ฌ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฌธ์์ ๋น๋์ 1/2 ๋งํผ front ์ append ํ๋ค.
๊ทธ๋ฌ๋ฉด front ๋ฌธ์์ด์ ์์ฑ๋๋ค.
mid ๋ฌธ์์ด์
ํ์ฌ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฌธ์์ ๋น๋๊ฐ ํ์์ด๋ฉด mid ์ append ํ์ฌ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
end ๋ฌธ์์ด์ front ๋ฌธ์์ด์ ๋ค์ง์ผ๋ฉด ๋๋ค.
์ ๊ณผ์ ์ ๊ฑฐ์น ํ,
front + mid + end ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค!
์ด๋ ๊ฒ ์ชผ๊ฐ์ ์๊ฐํ๋ ๊ด์ ์ด ๊ตฌํ์ด ๋ ๊ฐ๋จํ๋ค. ๐
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
String input = br.readLine();
int n = input.length();
int[] f = new int[26];
for (int i = 0; i < n; i++) {
f[input.charAt(i) - 'A']++;
}
int odd = 0;
for (int i = 0; i < 26; i++) {
if (f[i] % 2 == 1) {
odd++;
}
}
if (odd > 1) {
bw.write("I'm Sorry Hansoo");
} else {
StringBuilder front = new StringBuilder();
StringBuilder mid = new StringBuilder();
for (int i = 0; i < 26; i++) {
for (int j = 0; j < f[i] / 2; j++) {
front.append((char) ('A' + i));
}
}
for(int i = 0 ; i< 26 ; i++){
if(f[i]%2==1){
mid.append((char) ('A' + i));
}
}
String output = front.toString() + mid.toString() + front.reverse();
bw.write(output);
}
bw.flush();
bw.close();
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (Java, Segment tree) (0) | 2023.08.09 |
---|---|
[๋ฐฑ์ค 1931] ํ์์ค ๋ฐฐ์ (0) | 2023.07.28 |
[๋ฐฑ์ค 15681] ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (ํธ๋ฆฌ DP) (2) | 2023.06.07 |
[๋ฐฑ์ค 9019] DSLR ์๋ฐ(BFS + ๊ฒฝ๋ก ์ถ์ ) (0) | 2023.06.03 |
[๋ฐฑ์ค 1162 ๋๋กํฌ์ฅ] ์๋ฐ (๋ค์ต+DP) (0) | 2023.05.28 |