BOJ/Two Pointer
[BOJ] 17609 회문
J_Jayce
2021. 3. 3. 22:20
문제
17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
풀이
import java.io.*;
import java.util.*;
public class Main {
static boolean is_palin(String str) {
int len = str.length();
for(int i=0;i<len/2;i++) {
if(str.charAt(i)!=str.charAt(len-i-1))
return false;
}
return true;
}
static boolean is_pes_palin(String str) {
int len = str.length();
int front=0, rear=len-1;
while(front<=rear) {
if(str.charAt(front)!=str.charAt(rear)) {
return is_palin(str.substring(front+1,rear+1)) || is_palin(str.substring(front,rear));
}
front++;
rear--;
}
//시간 초과 코드
// String front, rear;
// for(int i=0;i<len;i++) {
// front = str.substring(0, i);
// rear = str.substring(i+1,len);
//
// //System.out.println(front+rear);
// if(is_palin(front+rear))
// return true;
// }
return true;
}
public static void main(String[] args) throws IOException {
//선언 및 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for(int i=0;i<N;i++) {
String str = br.readLine();
if(is_palin(str))
sb.append("0\n");
else if(is_pes_palin(str))
sb.append("1\n");
else
sb.append("2\n");
}
System.out.println(sb);
}
}