[PS] 백준 1254 팰린드롬 만들기

이진용·2023년 4월 3일
0
post-custom-banner

문제 설명

문제 바로가기
동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.

동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.

동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.

생각해보기

어떠한 팰린드롬 문자열을 PP라고 하자.
그리고 다른 어떠한 문자열을 WW라고 하자.
W의 reverse를 W1W^{-1}라고 하자.
W+P+W1W + P + W^{-1} 또한 팰린드롬 문자열이다.

주어진 문자열 SSWWPP로 나눌 수 있다.
S=W+PS = W + P
그러면 구하는 최종 문자열의 길이 CC
C=Len(S)+Len(W)C = Len(S) + Len(W) 가 된다.

풀이

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

public class Main {
    public static void main(String[] args) throws IOException {
        String S = new BufferedReader(new InputStreamReader(System.in)).readLine();
        int idx = 0;
        while(!isPalindrome(S, idx)){
            idx++;
        }
        System.out.println(idx + S.length());
    }

    private static boolean isPalindrome(String S, int start) {
        int end = S.length()-1;
        while(start < end) {
            if(S.charAt(start) != S.charAt(end))
                return false;
            start++;
            end--;
        }
        return true;
    }
}

while loop를 돌며 idx가 증가한다.
while을 탈출한 후 idx는 Len(W)Len(W)를 의미한다.

profile
멋있는 개발자가 되어야지.
post-custom-banner

0개의 댓글