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

이진용·2023년 4월 3일
0

문제 설명

문제 바로가기
동호와 규완이는 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
멋있는 개발자가 되어야지.

0개의 댓글