백준

[백준] 17609번 회문 (java, 구현)

해랑쓰 2021. 4. 21. 01:49
320x100
반응형

www.acmicpc.net/problem/17609

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

이중 포문을 안돌고 하는 방법은 양끝에서 비교해나가다가 다른 부분에서 둘 중 하나 삭제해보고 회문이 맞는지 

검사하면 되는 문제 

 

모든 곳을 한 번씩 삭제해볼 필요없이 처음 달라지는 부분만! 삭제해보면 된다.

package algo0420;

import java.util.Scanner;

public class B_17609_회문_Main {
	static int t;
	static String s;
	static char[] arr;
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		t=sc.nextInt();
		for (int tc = 1; tc <=t; tc++) {
			s=sc.next();
			arr=s.toCharArray();
			int left=0;
			int right=s.length()-1;
			if(check(left,right)) {
				System.out.println(0);
				continue;
			}
			if(checkS(left,right)) {
				System.out.println(1);
			}else {
				System.out.println(2);
			}
			
		}
		
	}
	
	private static boolean check(int left,int right) {
		while(left<=right) {
			if(arr[left]!=arr[right]) {//다름
				return false;
			}
			left+=1;
			right-=1;
		}
		return true;
	}
	
	private static boolean checkS(int left,int right) {
		while(left<=right) {
			if(arr[left]!=arr[right]) {//다름
				boolean a=check(left+1,right);
				boolean b=check(left,right-1);
				if(a==false && b==false) {
					return false;
				}else return true;
			}
			left+=1;
			right-=1;
		}
		return true;
	}
}
320x100
반응형