https://www.acmicpc.net/problem/1213
์์ด์ ๊ตฌํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ๋ณํด์คฌ๋ค.
๊ทผ๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค... ์๊ฐํด๋ณด๋ 50๊ธ์๋ฉด ๋ฌด๋ ค 50!์ด๋ ๋๋ค.
์ฝ๋ - ์๊ฐ ์ด๊ณผ
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class b1213 {
static char[] chs;
static boolean[] visited;
static char[] result;
static List<String> list;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
chs = sc.next().toCharArray();
visited = new boolean[chs.length];
result = new char[chs.length];
list = new ArrayList<>();
permutation(0); //์์ด
//์ถ๋ ฅ
if(list.size() == 0) {
System.out.println("I'm Sorry Hansoo");
} else {
Collections.sort(list);
System.out.println(list.get(0));
}
}
public static void permutation(int count) {
if(count == chs.length) {
if(isPalindrome()) { //ํฐ๋ฆฐ๋๋กฌ ํ๋ณ
String str = String.valueOf(result);
list.add(str);
}
return;
}
for(int i = 0; i < chs.length; i++) {
if(visited[i]) continue;
visited[i] = true;
result[count] = chs[i]; //๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ ์ฅ
permutation(count + 1);
visited[i] = false;
}
}
public static boolean isPalindrome() {
for(int i = 0; i < chs.length / 2; i++) {
if(result[i] != result[chs.length - i - 1]) {
return false;
}
}
return true;
}
}
์๊ฐ์ ์ค์ด๊ธฐ ์ํด์ ๋จผ์ ํฐ๋ฆฐ๋๋กฌ์ด ์๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฑธ๋ฌ์ค์ผ ํ๋ค.
์ด๋ค ์ํ๋ฒณ ์๊ฐ ํ์๊ฐ์ธ ๊ฒ์ด 2๊ฐ ์ด์์ด๋ฉด, ํฐ๋ฆฐ๋๋กฌ์ด ๋ ์๊ฐ ์๋ค. 0๊ฐ ๋๋ 1๊ฐ(ํด๋น ์ํ๋ฒณ์ด ๊ฐ์ด๋ฐ์ ๋ค์ด๊ฐ)์ฌ์ผ ํ๋ค.
๊ทธ๋์ ์์ด์ ์์ ๊ฐ ์ํ๋ฒณ ์๋ฅผ ์นด์ดํ ํ๊ณ ํ์๊ฐ์ธ ๊ฒ์ด 2๊ฐ์ธ์ง ํ๋ณํด์ฃผ๋ ๊ฒ์ ์ถ๊ฐํด์คฌ๋ค.
๊ทธ๋ฌ๋ ์๊ฐ์ด๊ณผ... ๊ทธ๋๋ ์์ด์ ์ฌ์ฉํด์ ์ฌ์ ํ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์์ด์ ๋ฒ๋ฆฌ๊ณ ์ง์ ํฐ๋ฆฐ๋๋กฌ์ธ ๋ฌธ์๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค๋ ์ ๊ทผ์ ๋ฃ๊ณ ๊ทธ๋ ๊ฒ ํ์๋ค.
์ฝ๋ - ์ฑ๊ณต
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
int[] alphabet = new int[26];
for(int i = 0; i < input.length(); i++) { //์ํ๋ฒณ ์ ์ ์ฅ
alphabet[input.charAt(i) - 'A']++;
}
int oddCount = 0;
char oddChar = ' ';
for(int i = 0; i < 26; i++) { //ํ์๊ฐ์ธ ์ํ๋ฒณ ๊ฐ์ ์ธ๊ธฐ
if(alphabet[i] % 2 == 1) {
oddCount++;
oddChar = (char)(i + 65);
}
if(oddCount == 2) break;
}
String answer = "";
if(oddCount == 2) { //๋ถ๊ฐ๋ฅ
answer = "I'm Sorry Hansoo";
} else { //ํ์๊ฐ์ธ ์ํ๋ฒณ 0๊ฐ or 1๊ฐ
String front = "";
String tail = "";
for(int i = 0; i < 26; i++) {
if(alphabet[i] >= 2) {
for(int j = 0; j < alphabet[i] / 2; j++) {
front += (char)(i + 65);
}
}
}
StringBuilder sb = new StringBuilder(front);
tail = sb.reverse().toString();
if(oddCount == 0) { //์ ๋ต ๋์ถ
answer = front + tail;
}else if(oddCount == 1){
answer = front + oddChar + tail;
}
}
//์ถ๋ ฅ
System.out.println(answer);
}
}
๊ฐ๊ฐ์ ์ํ๋ฒณ์ด ๋์ค๋ ์๋ฅผ ์ ์ฅํ๋ 26์นธ ์ง๋ฆฌ ๋ฐฐ์ด์ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์๊ฐ์ธ ์ํ๋ฒณ ๊ฐ์๋ฅผ ์ผ๋ค.
์ด๋ ํ๋ณํ์ ์ฃผ์ํด์ค์ผ ํ๋ค. ๋๋ฌธ์ A์ ์์คํค ์ฝ๋์ธ 65๋ฅผ ๊ธฐ์ตํด์ค์ผ ํ๋ค.
ํ์๊ฐ์ธ ์ํ๋ฒณ ๊ฐ์๋ฅผ ์ธ๋ฉด์ ํด๋น ๋ฌธ์๋ฅผ ์ ์ฅํ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ 2๊ฐ ์ด์์ด๋ฉด ๊ทธ๋ง๋๊ฒ ํ๋ค.
๊ทธ ๋ค์ 2๊ฐ๋ฉด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๊ณ , 0๊ฐ๋ 1๊ฐ์ด๋ฉด ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์์ด์ ๋ง๋ค๋๋ก ํ๋ค.
์ฌ์ ์์ผ๋ก ํ์ ๋ ๊ฐ์ฅ ๋จผ์ ์ค๋ ํฐ๋ฆฐ๋๋กฌ์ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก, ์ํ๋ฒณ ์์๋๋ก ํ์์ ํด ๋ฌธ์์ด์ ๋ง๋ค๋๋ก ํ๋ค.
ํฐ๋ฆฐ๋๋กฌ์ ๋์นญ์ด๋ฏ๋ก ์ ์ค๊ฐ ๋ค๋ก ๋๋ด๋ค. ์ํ๋ฒณ์ ์ ๋ฐ์ผ๋ก ๋๋ ์ ์์๋๋ก ํ๋์ฉ ๋ฌธ์๋ฅผ ๋ถ์ฌ ์ ๋ฌธ์์ด์ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ String์ reverse() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ ๋ฌธ์์ด์ ๋ค์ง์ด์ ๋ค ๋ฌธ์์ด์ ๋ง๋ค์๋ค. reverse๋ฅผ ํ๋ ค๋ฉด StringBuilder StringBuilder๋ก ๋ณํํด์ค์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ 0๊ฐ์ด๋ฉด ์ค๊ฐ ๋ฌธ์์ด ์์ด ์๋ค๋ง ๋ถ์ฌ์ ์ ๋ต์ ๋์ถํ๊ณ , 1๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ค๊ฐ์ ํ์๊ฐ์ธ ์ํ๋ฒณ์ ๋ถ์ฌ์คฌ๋ค.
๊ฒฐ๊ณผ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2961๋ฒ - ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (0) | 2022.08.16 |
---|---|
๋ฐฑ์ค 17406๋ฒ - ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 4 (0) | 2022.08.11 |
๋ฐฑ์ค 3040๋ฒ - ๋ฐฑ์ค ๊ณต์ฃผ์ ์ผ๊ณฑ ๋์์ด (0) | 2022.08.11 |
๋ฐฑ์ค 16922๋ฒ - ๋ก๋ง ์ซ์ ๋ง๋ค๊ธฐ (0) | 2022.08.11 |
๋ฐฑ์ค 16926๋ฒ : ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 1 (0) | 2022.08.09 |