백준 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);
}
}