1. 문제

1254번: 팰린드롬 만들기



2. 개요

문자열 S가 주어진다.

이 문자열 S의 뒤에 문자를 추가하여 펠린드롬을 만드려고 한다.

이 때 만들 수 있는 펠린드롬 문자열 중 가장 짧은 문자열의 길이를 출력하는 문제.



3. 풀이 및 코드

3-1. 풀이

처음부터 i번째 인덱스까지의 문자열을 뒤집어 맨 뒤에 이어붙인 후, 이 문자열이 펠린드롬이라면 그 길이를 출력한다.

3-2. Python

import sys

S = sys.stdin.readline().rstrip()

answer = len(S) * 2

def chk(s):
    for i in range(len(s) // 2):
        if s[i] != s[-1 - i]:
            return False

    return True

for i in range(len(S)):
    if chk(S + S[:i][::-1]):
        answer = min(answer, len(S + S[:i][::-1]))
        break

print(answer)

3-3. C#

namespace boj_1254
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string S = Console.ReadLine().TrimEnd();

            int answer = S.Length * 2;

            for (int i = 0; i < S.Length; i++)
            {
                string tmp = S + new string(S[..i].Reverse().ToArray());
                if (Chk(tmp))
                    answer = (int)MathF.Min(answer, tmp.Length);
            }

            Console.WriteLine(answer);
        }

        static bool Chk(string str)
        {
            for (int i = 0; i < str.Length / 2; i++)
            {
                if (str[i] != str[str.Length - 1 - i])
                    return false;
            }
            return true;
        }
    }
}

Comments