[SWEA] #5678 팰린드롬

wonyu·2022년 1월 4일
0

algorithm

목록 보기
15/25

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRrK7KhO4DFAUo

풀이 과정

가장 긴 팰린드롬 부분문자열을 구해야 하므로 부분문자열의 길이를 점점 줄여가며 검사하고자 했다. 그리고 길이가 줄어들면 원래의 문자열에 대해 한 자리씩 옮겨가며 부분문자열을 검사해야 하는데 (ex. 'abcdc'에서 길이가 4일 때는 'abcd'와 'bcdc'를 검사해야 하듯이) 이 부분에서 슬라이싱을 잘못해서 처음에 패스가 안 됐었다.
아무튼 이 부분을 수정하고, 가장 먼저 True가 나온 경우가 최대 부분문자열 길이이므로 바로 break를 해주도록 했다.

코드

def is_palindrome(word):
    n = len(word)
    for i in range(n // 2):
        if word[i] != word[-i - 1]:
            return False
    return True


T = int(input())
for tc in range(1, T+1):
    txt = input()
    N = len(txt)
    result = 0
    
    # 길이를 점점 줄여가며 검사
    for length in range(N, 0, -1):
        start = 0
        while start + length <= N:
            # 팰린드롬 확인: True 가 가장 먼저 리턴될 때가 최대 길이 -> break
            if is_palindrome(txt[start:start + length]):
                result = length
                break
            start += 1
        if result != 0:
            break

    print('#{} {}'.format(tc, result))

0개의 댓글