백준 1254 팰린드롬 만들기

홍찬우·2022년 12월 29일
0

문제

팰린드롬 만들기

팰린드롬의 길이를 구하자

난이도 : Silver2


풀이

1. 맨 끝 문자와 같은 문자를 탐색한다. 만약 없으면 팰린드롬 길이는 (현재 문자열 길이 * 2 - 1)
2. 같은 문자가 존재하면 그 둘 사이에 팰린드롬 규칙이 만족하는지 확인한다.
3. 만족하지 않는다면 문자열 내에 같은 문자가 또 있는지 확인 후 다시 규칙 만족까지 확인


코드

import sys
s = str(sys.stdin.readline().split()[0])

# 문자열 뒤집기
def reverse(s):
    a = ''
    for i in s:
        a = i + a
    return a

# 맨 마지막 문자와 같은 문자가 몇 번 인덱스에 존재하는지 확인
def get_index(t, st):
    return [i for i, ltr in enumerate(st) if ltr == t][1:]  # 맨 처음 원소가 맨 마지막 문자이므로 제외

# 분리한 문자열이 팰린드롬 규칙을 만족하는지 확인
def check(l):
    i, j = 0, len(l)  # 문자열의 맨 앞과 맨 뒤를 하나씩 빼며 비교하다가 하나라도 맞지 않는 부분이 있으면 False 반환
    for _ in range(len(l)//2):
        if l[i] == l[j-1]:  
            i += 1
            j -= 1
        else:
            return False
        
    return True
            
s = reverse(s)
end = s[0]

temp_lst = []  # 가능한 팰린드롬 길이 값들을 모두 저장하고, 마지막엔 min값을 반환
for i in get_index(end, s):
    lst = s[:i+1]
    if check(lst):
        temp_lst.append(len(lst) + 2*(len(s) - len(lst)))  # len(lst) : 문자열 s 내에서 팰린드롬 규칙을 만족하는 부분 문자열
    
if temp_lst:
    print(min(temp_lst))
else:
    print(len(s)*2-1)

        

결과

좀 복잡하게 푼 경향이 있다. 다른 사람들이 간단하게 짠 코드를 보고 많이 배울 필요가 있다.

profile
AI-Kid

0개의 댓글