프로그래머스_연속 부분 수열 합의 개수
완전탐색으로 모든 경우의 수를 돌리고 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로 큰 차이는 나지 않았지만, 더 빨라진 것을 확인할 수 있었다