<백준>1254번 팰린드롬 만들기

ming·2023년 4월 3일

백준1254번 링크

문제 설명

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

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

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

입력

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

출력

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

풀이 해석

먼저 팰린드롬인지 확인하는 메서드가 필요하다고 생각했고,
팰린드롬이 아니면 s의 앞글자부터 한글자씩 떼서 stringBuilder에 넣고 뒤집어서 s뒤에 붙이고 팰린드롬인지 확인하고 거짓이면 다시 stringBuilder를 뒤집어서 다음 글자를 떼와서 붙이고 뒤집고 s에 붙이고 팰린드롬 확인 이것을 s의 마지막글자 전까지 반복하면 된다.

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

public class Main {
    public static boolean ispelindrom (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 int shortestPelindrom(String s){ 
        if(ispelindrom(s)){
            return s.length();
        }else {
            String str;
            StringBuilder sb = new StringBuilder();
            int length = s.length();
            for (int i = 0; i < s.length() - 1; i++) {
                str = s;
                sb.append(s.substring(i, i + 1));
                str += sb.reverse().toString();
                if (ispelindrom(str)) {
                    length = str.length();
                    break;
                }
                sb.reverse();
            }
            return length;
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = "";
        try {
            s = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                br.close();
            }
        }
        System.out.println(shortestPelindrom(s));
    }
}
profile
개발 성장 기록

0개의 댓글