알고리즘

백준 - 팰린드롬 1254번 문제 (JAVA)

쿠키담임선생님 2024. 10. 22. 21:46

어떻게 팰린드롬을 알아내야할지 정해야 한다.
abab 가 있는 경우 

abab를 대칭인지 검사.

대칭이 아니라면 앞에 인덱스를 한칸 올려서

 

bab를 검사. 이때 대칭임으로 앞에 몇칸올렸는지 저장하고 있다가 뒤에 붙이면 된다.

 

즉 전체length 에 substring 한 인덱스를 붙이면 된다.

 

그러면 대칭인지 검사를 어떻게 하는지가 문제이다.

 

그 부분은 abab에서 가장 앞 인덱스 를 start 변수에 넣고 가장 끝 index를 end 변수에 넣는다.

 

그리고 while 문을 통해 한칸씩 start++ 와 end-- 를 하면서 값을 비교한다. 하나라도 다르다면 대칭이 아님으로 바로 return false를 하고 종료시킨다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class 백준_팰린드롬 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();
        //System.out.println(temp.substring(0,4));//abab 기준 bab
        int index = 0;
        int answer = 0;
        while (index <= temp.length()){
            String s = temp.substring(index, temp.length());
            if(palin(s)){ //중간으로 잘랐을 시 앞뒤가 같으면 현재 자른 index만큼 length 에 index를 더해준다 그 뒤 바로 break
                answer= index+temp.length();
                break;
            }
            index++;
        }
        System.out.println(answer);
    }
    private static boolean palin(String s){
        //앞뒤 잘랏을때 하나라도 다르면 false 리턴 후에 함수 종료
        int start = 0;
        int end = s.length()-1;
        while (start <= end){
            if(s.charAt(start) != s.charAt(end)){
                return false;
            }
            start++;
            end--;
        }
        return true;

    }
}