백준 17609 - 회문

Updated:

Java

17609 번 - 회문

문제

접근 방법

우선

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;
    	n = stoi(br.readLine());

    	String str;
    	while(n-- != 0) {
    		str = br.readLine();
    		int len = str.length();
    		// 회문 일때
    		if(chkPalin(str)) {
    			System.out.println(0);
    			continue;
    		}
			// 유사 회문인지 확인
    		for(int i = 0; i < len / 2; i++) {
				// 회문이 아닌, 문자가 발견 되었을 때, 양 쪽 중 하나씩 삭제해본다.
    			if(str.charAt(i) != str.charAt(len - 1 - i)) {
					// 둘 중 하나라도 회문이 될 때
    				if(chkPalin(str.substring(i + 1, len - i)) || chkPalin(str.substring(i, len - i - 1))) {
    					System.out.println(1);
    				}
					// 유사 회문도 아닐 시
    				else
    					System.out.println(2);
    				break;
    			}
    		}
    	}

    	br.close();
	}
	// 회문인지 판별하는 메서드
	static boolean chkPalin(String str) {
		int isOdd = (str.length() % 2 == 1 ? 1 : 0);
		String a = str.substring(0,str.length() / 2 + isOdd);		// 문자열을 반으로 나눈다.
		String b = str.substring(str.length() / 2,str.length());
		StringBuffer sb = new StringBuffer(b);
		b = sb.reverse().toString();								// 나머지 문자열을 뒤집는다.

		if(a.equals(b))
			return true;
		else
			return false;
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점