[BOJ 1213] 팰린드롬 만들기 (Java)

𝙃𝙖𝙞𝙡𝙚𝙮·2020년 12월 8일
0

BOJ

목록 보기
2/3
post-thumbnail

boj 1213 팰린드롬 만들기

💡 Learned

(1) 문자는 팰린드롬으로 짝을 이뤄야 하므로 각 문자는 짝수로 존재해야 함
(2) 홀수 길이의 문자열 가운데에 개수가 1개인 문자가 유일하게 위치할 수 있음

🤦‍ Review

주로 런타임 에러가 발생하는 이유
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/

🦦 Submitted

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);
		}
	}
}
profile
ෆ 𝓋𝒾𝓈 𝓉𝒶 𝓋𝒾𝑒 ෆ

0개의 댓글