풀이)
순서가 있는 사전 형식인 Treemap을 통해 입력받은 알파벳들을 정리한다.
주의할 점)
내 코드에선 treemap을 넣어서 풀었지만, 시간이 짧게 걸린 다른 사람들 코드를 보면 26칸짜리 배열을 만들어서 풀었다. 알파벳 관련 문제가 나오면 배열 26칸짜리를 만드는 쪽으로 생각해보자.
내 코드)
import java.io.*;
import java.util.*;
public class Bacjoon1476 {
public static void main(String[]args) throws IOException{
//입력받기.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String input = bf.readLine();
char arr[] = input.toCharArray();
StringBuilder first = new StringBuilder();
StringBuilder middle = new StringBuilder();
StringBuilder last = new StringBuilder();
//사전 만들어서 알파벳 개수별로 정리하기.
TreeMap<Character, Integer> table = new TreeMap<>();
for(int i=0;i<arr.length;i++) {
if(table.containsKey(arr[i])) {
int num = table.get(arr[i]);
table.put(arr[i], num+1);
}else {
table.put(arr[i], 1);
}
}
//문장 만들기
//1. 사전 알파벳 순으로 각 단어 개수의 반은 first 뒤에, 반은 last 앞에 붙인다.
//2. 만약 단어 개수가 홀수라면 first 뒤에 붙인다.
//3. 만약 이전 단어 개수가 홀수인데 그다음 단어 개수도 홀수라면 break하고 팰린드롬을 만들 수 없다고 출력한다.
//4. 위의 조건을 만족하면 first와 last 단어를 붙여서 출력한다.
Iterator<Character> keys = table.keySet().iterator();
while(keys.hasNext()){
char key = keys.next();
if((table.get(key) %2 == 0)) {
for(int i=0;i<table.get(key)/2;i++) {
first.append(key);
last.insert(0, key);
}
}
else if ((table.get(key)%2!=0) && table.get(key)>1) {
if(middle.length() != 0) {
System.out.println("I'm Sorry Hansoo");
return;
}else {
for(int i=0;i<table.get(key)/2;i++) {
first.append(key);
last.insert(0, key);
}
middle.append(key);
}
}
else {
if(middle.length() != 0) {
System.out.println("I'm Sorry Hansoo");
return;
}else {
middle.append(key);
}
}
}
first.append(middle); first.append(last);
System.out.println(first);
bf.close();
}
}