본문 바로가기

문제 풀이/Baekjoon

[백준] S1 1254 팰린드롬 만들기 (JAVA)

문제 출처 - Baekjoon Online Judge

문제는 여기

 

1254번: 팰린드롬 만들기

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

www.acmicpc.net

[문제] 

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

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

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

[입력]

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

[출력]

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

 

 


[풀이]

1. 문자가 팰린드롬인지 아닌지를 체크한다.

2. 팰린드롬이 아니라면 앞에서 한 문자씩 줄여가면서 팰린드롬인지 체크한다.

3. 팰린드롬이 맞게 되면 앞에서 자른 문자열의 수만큼을 추가한 길이가 정답이 된다.

[접근]

1. 팰린드롬을 만들기 위해서는 각 구간이 팰린드롬인지 체크를 할 필요가 있을 것 같았다.

2. 팰린드롬이 아니라면 앞에서부터 한 문자씩 줄여가면서 팰린드롬인지를 체크해야겠다고 생각했다.

[코드]

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

public class Main_S1_1254 {
	static String s;
	static int len;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        s = br.readLine();
        len = s.length();
        
        for (int i = 0; i < s.length(); i++) {
        	// 구간을 잘라서 펠린드롬인지 아닌지 확인
            if (Palindrome(s.substring(i))) {
                break; // 펠린드롬이면 탈출
            }
            len++;
        }
        System.out.println(len);
    }

	// 펠린드롬인지 확인
    static boolean Palindrome(String s) {
        int start = 0; // 시작
        int end = s.length() - 1; // 끝
        
        while (start <= end) {
        	// 다르면
        	if (s.charAt(start) != s.charAt(end))
        		return false; // 펠린드롬이 아님
        	start++;
        	end--;
        }
        
        return true; // 끝까지 탐색이 되면 펠린드롬
    }
}