BOJ/Two Pointer

[BOJ] 17609 회문

J_Jayce 2021. 3. 3. 22:20

문제

www.acmicpc.net/problem/17609

 

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