https://school.programmers.co.kr/learn/courses/30/lessons/131701
처음 제출한 코드
from itertools import permutations
def solution(elements):
answer = []
for i in range(1,len(elements) + 1):
for j in range(len(elements)):
if i + j > len(elements):
idx = len(elements) - j
a = elements[j:] + elements[:idx]
else:
a = elements[j:j+i]
s = sum(a)
answer.append(s)
b = set(answer)
return b+1
역시나 타임아웃...
이중 반복문 사용은 elements의 길이를 보아선 절대 타임아웃이 일어나질 않는다.
그렇다면 내 생각으론 타임아웃이 일어나는 이유는 딱 두가지다.
인덱싱와 list to set.
이 둘을 수정하니 무난히 통과했다.
다음에 제출한 코드
def solution(elements):
answer = 0
elements = elements * 2
s = set()
for i in range(1,len(elements) // 2):
for j in range(len(elements) // 2):
a = sum(elements[j:j+i])
s.add(a)
return len(s) + 1
마지막에 +1을 한 이유는
첫번째 for문이 range(1,len(elements) // 2이기 때문이다.
때문에 마지막 len(elements) 부분 수열 합을 구하지 않는것이다.
예를들어, [7,9,1,1,4]일때 마지막 5개의 부분 수열 합을 구해야 하는데, 이를 구하지 않기 때문에 +1을 해주었다.
len(elements) + 1로 해준다면 마지막에 +1을 안해주어도 무난히 통과할 것이다.
'알고리즘' 카테고리의 다른 글
*프로그래머스)[3]차 방금그곡 (0) | 2023.02.15 |
---|---|
프로그래머스)택배상자 (0) | 2023.02.14 |
프로그래머스)모음사전-pyhton (0) | 2023.02.13 |
프로그래머스)시저 암호-python (0) | 2023.02.13 |
백준 2750)수 정렬하기 (0) | 2023.02.12 |