문제 풀이/백준

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

27200 2025. 1. 9. 18:04

문제

https://www.acmicpc.net/problem/1254


풀이(22분)

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        char[] arr = input.toCharArray();
        int n = arr.length;
        int answer = 0;

        // 최소 길이를 계산
        for (int i = 0; i < n; i++) { // 문자열의 각 접두사부터 회문 여부 확인
            if (isPalindrome(arr, i, n - 1)) { 
                // i번째 접두사부터 끝까지가 회문이면,
                answer = n + i; // 전체 길이 + 앞쪽에 추가할 문자 수
                break; // 더 짧은 회문을 찾았으므로 종료
            }
        }

        System.out.println(answer);
    }

    // 부분 문자열이 회문인지 확인
    private static boolean isPalindrome(char[] arr, int start, int end) {
        while (start < end) { // 양쪽 끝에서 가운데로 이동하며 확인
            if (arr[start] != arr[end]) { // 문자가 다르면 회문이 아님
                return false;
            }
            start++; // 왼쪽 인덱스 증가
            end--;   // 오른쪽 인덱스 감소
        }
        return true; // 모든 문자가 같으면 회문
    }
}