본문 바로가기

알고리즘

프로그래머스)연속 부부 수열 합의 개수-python

https://school.programmers.co.kr/learn/courses/30/lessons/131701

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

처음 제출한 코드

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