개발 공부~

[백준 - 17609] 회문 .java 본문

코딩테스트/백준

[백준 - 17609] 회문 .java

머밍 2025. 5. 21. 23:38

https://www.acmicpc.net/problem/17609

 

 

  • 회문 : 처음부터 시작, 끝부터 시작하는 포인터 2개를 두고 하나씩 증가, 감소시키며 현재 가리키는 문자가 일치하면 회문
  • 유사회문: 회문이다가 처음으로 다른 지점을 만났을때 그 지점의 두 포인터중 하나를 각각 뺀 문자열이 회문이면 유사회문
  • => 문자 하나를 제거하여 회문으로 만들 수 있어야함

=> 회문인지 검사하다 처음 다른 지점이 나왔을때, 2개의 문자열이 회문인지 검사 -> 회문이면 유사회문

 

  • isPaindrome 함수

문자열이 회문인지 확인

l과 r을 이용해 문자열의 양 끝에서부터 하나씩 비교

 

import java.util.Scanner;



public class Main {
	//주어진 문자열이 회문인지 확인하는 함수
	public static boolean isPaindrome(char[] s, int l, int r) {
		while(l<=r) {
			if(s[l]!=s[r]) return false;
			l++;
			r--;
		}
		return true;
	}
    public static void main(String[] args)  {
    	
    	Scanner sc = new Scanner(System.in);
    	int n = sc.nextInt();
    	
    	
    	while(n-->0) {
    		char[] s = sc.next().toCharArray();
    		//회문이면 0
    		int l=0,r=s.length-1;
    		int answer = 0;
    		while(l<=r) {
    			//유사회문 혹은 회문이 아니면
    			if(s[l]!=s[r]) {
                //현재 l이나 r이 가리키는 문자를 하나씩 제거했을때 회문이면 유사회문
    				if(isPaindrome(s, l, r-1) || isPaindrome(s, l+1,r)) answer =1;
    				else answer=2;//회문 아님
    				break;//결과가 나왔으니 빠져나가기
    			}
    			l++;
    			r--;
    		}
    		System.out.println(answer);
    		
    	}

     }
    
}