[백준] 1254번: 팰린드롬 만들기 문제 풀이

현톨·2022년 3월 14일
0

Algorithm

목록 보기
3/42

문제

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

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

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

입력

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

출력

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

문제 풀이
1. 문자열의 몇번째부터 문자부터 팰린드롬이 성립되는지 확인한다.
2. i번째 문자부터 문자열을 뒤집어도 똑같아진다면 i번째 이전 문자들을 문자열 뒤에 똑같이 추가해준다.
ex) abcbc를 입력받았다면 3번째 즉, cbc부터 뒤집어도 똑같으므로, 문자열 뒤에 bc를 추가해주면 abcbcba가 되어 팰린드롬이 된다.

사실 문제에서는 팰린드롬을 만들었을 때의 문자열의 길이를 출력하는 것이 목적이기 때문에 굳이 추가하지 않고 i번째 문자열의 길이만큼만 추가해주면 된다.

전체 코드

S = input()

# 입력받은 문자열이 팰린드롬 문자열이라면
if S == S[::-1]:
    print(len(S))
else:
    # 문자열의 길이만큼 반복
    for i in range(len(S)):
        # 문자열의 i번째부터 팰린드롬이라면
        if S[-1:i-1:-1] == S[i:]:
            # 문자열 i 이전 문자들을 문자열 뒤에
            # 독같이 추가하여 팰린드롬을 만든다.
            print(len(S)+i)
            break

S[::-1]을 하면 문자열을 뒤집은 것과 같기 때문에 해당 부분만 잘 활용한다면 어렵지 않은 문제였다.

profile
기록하는 습관 들이기

0개의 댓글

관련 채용 정보