[프로그래머스 | Python] 연속 부분 수열 합의 개수

게으른 완벽주의자·2023년 2월 2일
0

프로그래머스

목록 보기
35/83
post-custom-banner

프로그래머스_연속 부분 수열 합의 개수
완전탐색으로 모든 경우의 수를 돌리고 set의 길이를 출력하는 방식으로 풀었다

1) 내가 푼 코드

def solution(elements):
    answer = set(elements)

    n = len(elements)
    
    for i in range(n):
        elements = elements[1:] + [elements[0]]
        for j in range(2,n+1):
            answer.add(sum(elements[:j]))
        
    return len(answer)

통과하기는 했으나 최악의 경우 시간이 3879.30ms까지 나와서 다른 코드도 검색해봤다

2) 다른 코드

def solution(elements):
    answer = set()

    n = len(elements)
    elements = elements*2
    
    for i in range(n):
        for j in range(n):
            answer.add(sum(elements[j:j+i+1]))
        
    return len(answer)

elements를 2배 길이로 늘린 후, 앞에서 하나씩 가다보면 모든 경우의 수를 다 확인할 수 있다
원형으로 나온 문제는 리스트의 길이를 2배로 늘리면 리스트를 순환하는 것과 동일한 효과를 낼 수 있다는 걸 배울 수 있었다
시간은 최악의 경우 3632.57ms로 큰 차이는 나지 않았지만, 더 빨라진 것을 확인할 수 있었다

profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글