본문 바로가기

프로그래머스(LV2)

[프로그래머스][Python] 연속 부분 수열 합의 개수, 코드 설명

1. 문제

코딩테스트 연습 - 연속 부분 수열 합의 개수 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

2. 문제 풀이

from collections import deque
 
def solution(elements):
    
    answer = set() #중복제거를 위해
    elements = deque(elements)
    
    for i in range(len(elements)): #수열 갯수만큼
        elements.rotate(1) #회전
        for j in range(1, len(elements)):
            answer.add(sum(list(elements)[:j]))
                       
    answer.add(sum(elements)) #다 합해진 경우를 추가해준다.
    return len(answer)

 

코드 설명, 원리

먼저 element를 deque로 저장을 한다.

그리고 원소의 길이만큼 한칸씩 옮기면서 두번 째 for문에 들어가게 된다.

그리고 원소의 2개, 3개, ... element-1개 까지 더하고 answer에 저장한다. (단 중복은 1번만 저장된다. set이기에)

다 더한 경우는 추가하지 않았으므로 for문이 끝나고 다 더해준 값을 저장하고 리턴한다.

 

answer = set() / set을 쓰면 중복을 허용하지 않는다. 예를 들어 1,1,1이 들어와도 1만 저장한다.

element.rotate(1)은 원소를 한칸씩 움직인다. 1,2,3,4의 경우 -> 2,3,4,1이 된다.

sum(list(elements)[:j])은 리스트 인덱스 j까지 더한다. 

 

 

set에 대한 설명을 더 보고 싶으면 링크를 남긴다.

2023.05.04 - [파이썬/자료구조] - [Python] Set() 함수 정의, 예시, 집합 연산, 다양한 사용법