SW/알고리즘

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

얇은생각 2019. 9. 23. 07:30
반응형

풀이

def isPalindrome(s, start, end):
    diff = int((end - start + 1) / 2 - 1)
    
    for i in range(diff + 1):
        c1 = s[start + i]
        c2 = s[end - i];
        
        if c1 != c2:
            return False

    return True


def solution(s):
    
    for answer in range(len(s),0,-1):
        start = 0
        end = 0 + answer - 1
        
        while end < len(s):
            if isPalindrome(s, start, end):
                return answer;
            start += 1
            end += 1
    
    return 1

 

 

 

실행 결과

정확성 테스트

테스트 1 통과 (0.05ms, 10.8MB)
테스트 2 통과 (0.05ms, 10.7MB)
테스트 3 통과 (2.83ms, 10.8MB)
테스트 4 통과 (2.51ms, 10.8MB)
테스트 5 통과 (2.12ms, 10.8MB)
테스트 6 통과 (2.84ms, 10.7MB)
테스트 7 통과 (2.67ms, 10.7MB)
테스트 8 통과 (2.71ms, 10.8MB)
테스트 9 통과 (0.05ms, 10.7MB)
테스트 10 통과 (0.05ms, 10.8MB)
테스트 11 통과 (0.05ms, 10.8MB)
테스트 12 통과 (0.04ms, 10.8MB)
테스트 13 통과 (1.88ms, 10.7MB)
테스트 14 통과 (7.95ms, 10.8MB)
테스트 15 통과 (6.13ms, 10.7MB)
테스트 16 통과 (7.42ms, 10.8MB)
테스트 17 통과 (0.04ms, 10.8MB)
테스트 18 통과 (0.04ms, 10.7MB)
테스트 19 통과 (2.08ms, 10.8MB)
테스트 20 통과 (1.29ms, 10.8MB)
테스트 21 통과 (1.49ms, 10.8MB)

효율성 테스트

테스트 1 통과 (2396.26ms, 10.7MB)
테스트 2 통과 (0.58ms, 10.8MB)

채점 결과

정확성: 69.3

효율성: 30.7

합계: 100.0 / 100.0

 

 

 

총평

먼저 팰린드롬인지 체크하는 함수를 만들어줍니다. 해당 함수는 문자열과 시작, 끝 위치를 파라미터로 받습니다 .그 다음, 끝에서부터 하나씩 체크를 하고, 만약 같은 경우에는 참을 반환합니다. 해당 함수를 만든 후, 모든 경우를 체크할 수 있도록 구현합니다. 우선 따라서 2중 반복문을 활용하였습니다. 그리고 가장 큰 단위부터 체크를 합니다. 가장 큰 단위가 팰린드롬인 경우, 해당 값을 바로 리턴을 하여, 불필요한 연산을 줄이도록 해야 합니다.

반응형