본문 바로가기
Algorithm(알고리즘)/Java

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

by Jun_N 2021. 4. 7.

문제

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

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

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

입력

첫째 줄에 문자열 S가 주어진다. S의 길이는 최대 1000이다.

출력

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

 


 

🌈 풀이 후기

  • 은근 자주 나오는 팰린드롬 문제이다.
  • 처음에는 문제를 잘못 읽고 투포인터로 접근했다가 뒤에만 붙일 수 있다는걸 알고 다시 풀었다.

👩‍🏫 문제 풀이

  1. start를 하나씩 증가시키면서 팰린드롬이 성립되는지 확인한다.
  2. 만약 팰린드롬이 되면 그 즉시 종료시킨다.
  3. 팰린드롬이 아니면 start를 하나 증가시키고 다시 팰린드롬 체크한다.
package com.Boj.Day12;

import java.util.Scanner;

public class BOJ_S1_1254_팰린드롬만들기 {
	
	private static int sol(String str) {
		int len=str.length();
		
		for (int i = 0; i < len; i++) {
			if(isPalind(str.substring(i))) {
				return len+i;
			}
		}
		return 0;
	}

	private static boolean isPalind(String str) {
		
		int start=0;
		int end=str.length()-1;
		
		while(start<=end) {
			if(str.charAt(start) !=str.charAt(end))
				return false;
			start++;
			end--;
		}
		return true;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		
		System.out.println(sol(str));
	}
}