알고리즘/프로그래머스

프로그래머스 - 가장 긴 팰린드롬 / Python

Hwisaek 2021. 8. 20. 20:08
반응형

문제: https://programmers.co.kr/learn/courses/30/lessons/12904

 

코딩테스트 연습 - 가장 긴 팰린드롬

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

programmers.co.kr

문제 설명

더보기
문제 설명

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

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

제한사항

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

입출력 예

sanswer
"abcdcba" 7
"abacde" 3

입출력 예 설명

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

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


정답

def solution(s):
    answer = 1

    l = len(s)

    for start in range(l):
        for end in range(start + 2, l + 1):
            a = s[start:end]
            if len(a) < answer:
                continue
            if a == a[::-1]:
                answer = max(answer, end - start)
    return answer

 


풀이

더보기
def solution(s):
    answer = 1

    l = len(s)

    for start in range(l):
        for end in range(start + 2, l + 1):
            a = s[start:end]
            if len(a) < answer:
                continue
            if a == a[::-1]:
                answer = max(answer, end - start)
    return answer

 간단한 아이디어로 풀 수 있는 문제입니다.

 시간초과를 조심해야하는데, end의 범위를 range(start+2, l+1)로 지정해주고, len(a) < answer 일 때 continue를 해주지 않으면 시간초과가 납니다.
반응형