관리 메뉴

커리까지

[프로그래머스] 가장 긴 팰린드롬 파이썬 본문

알고리즘/풀이

[프로그래머스] 가장 긴 팰린드롬 파이썬

목표는 커리 2023. 6. 26. 22:20
728x90
SMALL

문제 설명

앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.

예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.

제한사항
  • 문자열 s의 길이 : 2,500 이하의 자연수
  • 문자열 s는 알파벳 소문자로만 구성

입출력 예
s answer
"abcdcba" 7
"abacde" 3
입출력 예 설명

입출력 예 #1
4번째자리 'd'를 기준으로 문자열 s 전체가 팰린드롬이 되므로 7을 return합니다.

입출력 예 #2
2번째자리 'b'를 기준으로 "aba"가 팰린드롬이 되므로 3을 return합니다.

제출 답안

  1. 먼저 s를 뒤집은 s_re를 만든다.
  2. 그런 후 startend를 변경해가며 값이 같으면 answer를 갱신한다.
    1. 여기서 미리 s_re를 만들어 놓지 않고 s[start:end][::-1]로 비교하면 효율성은 통과하지만 시간이 오래 걸린다.
    2. 미리 만들어서 범위를 변경하면 3배 빠르다.
def solution(s):
    answer = 1
    s_re = s[::-1]
    n = len(s)
    for start in range(n):
        for end in range(n, start-1, -1):
            if s[start:end] == s_re[n-end:n-start]:
                answer = max(answer, end-start)
    return answer
728x90
LIST
Comments