1. 문제
코딩테스트 연습 - 연속 부분 수열 합의 개수 | 프로그래머스 스쿨 (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() 함수 정의, 예시, 집합 연산, 다양한 사용법
'프로그래머스(LV2)' 카테고리의 다른 글
[프로그래머스][Python] 피로도, 코드설명 (0) | 2023.05.24 |
---|---|
[프로그래머스][Python] 카펫 (0) | 2023.03.22 |
[프로그래머스][Python] 영어 끝말잇기 (0) | 2023.03.21 |
[프로그래머스][Python] 짝지어 제거하기 (2) | 2023.03.19 |
[프로그래머스][Python] 다음 큰 숫자 (0) | 2023.03.17 |