[백준]1254-팰린드롬 만들기(Java)

김성호·2023년 4월 7일

문제 링크

[문제]

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

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

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

[입력]

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

[출력]

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


[풀이]

  1. 팰린드롬 여부를 확인 팰린드롬 일 경우 문자열의 길이를 반환
  2. 팰린드롬이 아닌 경우에는 문자를 하나씩 잘라 만든 문자열이 팰린드롬인지 찾고 찾은 경우 팰린드롬이 시작하는 문자열 왼쪽에 있는 길이만큼 오른쪽에 붙여주면 팰른드롬이 되고 그때의 길이가 정답

Java 코드

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

public class Main {
	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();
        length = s.length();
        
        for (int i = 0; i < s.length(); i++) {
        	// 구간을 잘라서 펠린드롬인지 아닌지 확인
            if (isPalindrome(s.substring(i))) {
                break; // 펠린드롬이면 탈출
            }
            length++;
        }
        System.out.println(length);
    }

	// 팰린드롬 여부 체크할 함수
    static boolean isPalindrome(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; // 팰린드롬이 아닌 경우에 안걸리면 팰린드롬
    }
}
profile
백엔드 개발자가 되고 싶은 예비 개발자 입니다.

0개의 댓글