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

이환희·2021년 6월 7일
0

Algorithm

목록 보기
26/47

문제 설명

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

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

제한사항

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

풀이

def solution(s):
    answer = 0
    maxOddCnt = 0
    maxEvenCnt = 0
    for i in range(len(s)):
        oddCnt = 0
        evenCnt = 0
        # 짝수
        if i+1 != len(s) and s[i] == s[i+1]:
            for j in range(1, min(i, len(s)-i-2)+1):
                if s[i+1+j] == s[i-j]:
                    evenCnt += 1
                else:
                    break
        # 홀수
        for j in range(1, min(i, len(s)-i-1)+1):
            if s[i+j] == s[i-j]:
                oddCnt += 1
            else:
                break

        if maxOddCnt <= oddCnt:
            maxOddCnt = oddCnt

        if maxEvenCnt <= evenCnt:
            maxEvenCnt = evenCnt

    if maxEvenCnt == 0 and maxOddCnt == 0:
        return 1
    answer = max(maxOddCnt*2+1, maxEvenCnt*2+2)
    return answer

가운데 글자를 기준으로 하나씩 비교하며 대칭을 찾았다
이때, aaaa같은 짝수 일때랑 aaaaa같은 홀수를 구분하기 위해 oddCnt랑 evenCnt를 따로 만들어 줘서 해결했는데 다른 사람의 풀이를 보니까 너무 어렵게 푼것 같다;;

다른사람 풀이

def longest_palindrom(s):
    s = s.lower()
    results = []

    for i in range(len(s)):
        for j in range(i):
            chunk = s[j:i + 1]

            if chunk == chunk[::-1]:
                results.append(chunk)

    return len(max(results, key=len))

그냥 i랑 j를 활용해 2중 for문으로
모든 문자열을 chunk에 담고
chunk[::-1]을 써서 거꾸로한뒤 비교해서 같으면 리스트에 넣어주고
가장 긴 값을 리턴하면 된다ㅋㅋ..

0개의 댓글

관련 채용 정보