(1) 문자는 팰린드롬으로 짝을 이뤄야 하므로 각 문자는 짝수로 존재해야 함
(2) 홀수 길이의 문자열 가운데에 개수가 1개인 문자가 유일하게 위치할 수 있음
주로 런타임 에러가 발생하는 이유
1. 배열에 할당된 크기를 넘어서 접근했을 때 java.lang.ArrayIndexOutOfBoundsException
2. 전역 배열의 크기가 메모리 제한을 초과할 때
3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
4. 0으로 나눌 떄
5. 라이브러리에서 예외를 발생시켰을 때
6. 재귀 호출이 너무 깊어질 때
7. 이미 해제된 메모리를 또 참조할 때
8. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때
9. C/C++에서 반환형이 void가 아닌 main이 아닌 함수에서 아무런 값을 반환하지 않았을 때
참고하면 좋은 글 https://www.secmem.org/blog/2020/09/19/rte/
import java.io.*;
public class Main {
public static String reverseString(String s){
return (new StringBuffer(s)).reverse().toString();
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int[] a = new int[26];
for(int i=0; i<s.length(); i++) {
a[s.charAt(i)-'A']++;
}
int midIdx = 0, odd = 0;
for(int i=0; i<a.length; i++) {
if(a[i]%2!=0) {
midIdx = i;
odd++;
}
}
if((s.length()%2!=0 && odd>1) || (s.length()%2==0 && odd>0)) {
System.out.print("I'm Sorry Hansoo");
} else {
String ans = "";
for(int i=0; i<a.length; i++) {
for(int j=0; j<a[i]/2; j++) {
ans += ((char)(i+'A'));
}
}
String rev = reverseString(ans);
if(odd==1) ans += ((char)(midIdx+'A'));
System.out.print(ans+rev);
}
}
}