[BOJ/JAVA] 1254. 팰린드롬 만들기

AmeriKano·2023년 4월 3일
0

문제 링크

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

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

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

입력

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.

출력

첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.

입력 예시

abacaba

출력 예시

7

접근 방법

가장 짧은 팰린드롬을 어떻게 만들 수 있는지 생각해보면 된다. 주어진 문자열에서 팰린드롬이 되는 부분 문자열 중에서 가장 긴 것을 찾고, 나머지 삭제한 부분을 앞/뒤에 이어붙이면 가장 짧은 팰린드롬이 될 것이다.
문자열을 입력받은 후 팰린드롬인지 아닌지 확인한 뒤, 아니라면 맨 앞 글자를 삭제한 뒤 count 를 증가해준다. (삭제한 문자의 개수) 그 다음 다시 확인하고, 이를 반복하여 팰린드롬이 된다면 삭제한 문자의 수에서 원래 문자열 S 의 길이를 더해주면 최소 길이를 구할 수 있다.

소스 코드

import java.io.*;

public class Main {

    public static boolean checkPalindrome (String s) {
        for (int i=0; i<s.length()/2; i++) {
            if(s.charAt(i) != s.charAt(s.length()-1-i)) return false;
        }
        return true;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder S = new StringBuilder(br.readLine());
        int count = 0;
        int original = S.length();

        while (!checkPalindrome(S.toString())) {
            S.deleteCharAt(0);
            count++;
        }
        bw.write((original+count)+"\n");
        bw.flush();
    }
}

제출 결과


마무리하며

팰린드롬 문제는 오랜만에 풀어봐서, 팰린드롬을 구하는 방법이 바로 생각나지 않았던게 개인적으로 조금 아쉬웠다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글