오뚝이개발자

가장 긴 팰린드롬 본문

코딩 테스트/프로그래머스

가장 긴 팰린드롬

땅어 2020. 9. 18. 16:19
728x90
300x250

문제설명

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

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


제한사항

 

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

입출력 예


입출력 예에 대한 설명

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

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


풀이

주어진 문자열 s의 부분 문자열들을 모두 검사하여 팰린드롬인 경우들 중 길이가 가장 긴 것의 길이를 return하면 된다.

  1. 길이 2 이상의 부분문자열로 쪼개 탐색한다
  2. 길이가 짝수인 경우와 홀수인 경우로 나누어 팰린드롬 조건을 만족하는지 검사한다.
  3. 길이가 가장 긴 것을 return

문제에서 조건이 하나 빠진 것 같은데....참고로, 팰린드롬이 없을 경우 1을 return하면 된다. 왜냐하면 abcde에서 a 하나도 길이 1의 팰린드롬으로 칠 수 있기 때문이다.

def solution(s):
    answer = 0

    for i in range(len(s)-1):
        for j in range(i+1, len(s)):
            sub = s[i:j+1]
            if len(sub)%2==1:
                sub1 = sub[:len(sub)//2]
                sub2 = sub[len(sub)//2+1:]
                sub2 = sub2[::-1]
                if sub1 == sub2:
                    answer = max(answer, len(sub))
            else:
                sub1 = sub[:len(sub)//2]
                sub2 = sub[len(sub)//2:]
                sub2 = sub2[::-1]
                if sub1 == sub2:
                    answer = max(answer, len(sub))
    if answer==0:
        return 1
    return answer

 

728x90
300x250

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

가장 먼 노드  (0) 2020.09.21
섬 연결하기  (0) 2020.09.20
이중우선순위큐  (0) 2020.09.16
단속카메라  (0) 2020.09.12
N으로 표현  (0) 2020.09.11
Comments