티스토리 뷰
https://www.acmicpc.net/problem/1213
해설
- counts 배열에 문자 개수 저장
- 팰린드롬을 체크할 front, back, mid 생성
- StringBuilder를 사용한 이유는 index 지정해서 문자를 추가할 수 있기 때문이다.
- counts 배열을 순회
- 현재 문자가 2개 이상 저장되어 있다면 front와 back에 저장한다.
단, back에 저장할 때는 팰린드롬 처리를 해야하므로 0번 인덱스에 삽입한다.
기존 : AB, 'C' 삽입 후 : CAB - 현재 문자가 1개라면 mid에 저장한다.
- 1개의 의미는 팰린드롬을 만들기 위한 중간 문자임을 의미한다.
- 현재 문자가 2개 이상 저장되어 있다면 front와 back에 저장한다.
- mid 문자열 길이가 1 이상이면 팰린드롬이 될 수 없음
- mid에 맞춰서 출력을 다르게 한다.
코드
import java.io.*;
import java.util.*;
public class Main {
static int[] counts = new int[26];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (char c : br.readLine().toCharArray()) {
counts[c - 'A']++;
}
StringBuilder front = new StringBuilder();
StringBuilder back = new StringBuilder();
StringBuilder mid = new StringBuilder();
for (int i = 0; i < 26; i++) {
char c = (char) (i + 'A');
while (counts[i] > 1) {
front.append(c);
back.insert(0, c);
counts[i] -= 2;
}
if(counts[i] == 1) {
mid.append(c);
counts[i]--;
}
}
if(mid.length() > 1) {
System.out.println("I'm Sorry Hansoo");
} else {
System.out.println(front.append(mid).append(back));
}
}
}