[프로그래머스/Lv2] 연속 부분 수열 합의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/131701
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
def solution(elements):
new_elements = elements + elements[:len(elements)-1]
answer_list = []
for num in range(1, len(elements)+1):
tmp_list = []
for i in range(len(elements)):
tmp_list.append(sum(new_elements[i:i+num]))
answer_list += tmp_list
return len(set(answer_list))
설명
원형 수열의 구현을 위해 주어진 수열에 주어진 수열(마지막 원소만 제외)을 덧붙여서 문제를 풀 것이다.
모듈러 연산을 통해서도 원형 수열을 구현할 수 있는데, 이 문제의 경우 수열을 붙여버리는게 더 쉽게 풀리는 것 같다.
1부터 elements 수열의 길이까지 반복하면서
새로 만든 수열(이어 붙인것)를 슬라이싱해서 더해준 것들을 중복처리하고 개수를 세주면 정답이 나온다.
new_elements = elements + elements[:len(elements)-1]
new_elements는 원형 수열을 나타내는 변수이다.
elements와 elements(마지막 원소 빼고)를 더한 리스트이다.
answer_list = []
for num in range(1, len(elements)+1):
tmp_list = []
for i in range(len(elements)):
tmp_list.append(sum(new_elements[i:i+num]))
answer_list += tmp_list
answer_list는 모든 연속 부분 수열의 합들을 저장할 리스트이다.
1부터 elements의 길이+1까지 반복한다(연속 부분 수열의 길이를 결정).
tmp_list는 각 단계의 연속 부분 수열의 합을 저장할 리스트이다.
0부터 elements의 길이까지 반복한다.
new_elements를 i부터 i+num까지 슬라이싱 한 리스트를 sum(길이가 num인 연속 부분 수열의 합)하여 tmp_list에 append한다.
안쪽 반복이 끝나면 answer_list에 tmp_list를 더한다.
return len(set(answer_list))
answer_list를 set 자료형으로 변환하고(중복 제거) 그 길이를 반환한다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 게임 맵 최단거리 (0) | 2022.11.23 |
---|---|
[프로그래머스/Lv2] 모음사전 (0) | 2022.11.22 |
[프로그래머스/Lv2] [3차] 파일명 정렬 (0) | 2022.11.18 |
[프로그래머스/Lv2] 방문 길이 (0) | 2022.11.17 |
[프로그래머스/Lv2] 땅따먹기 (0) | 2022.11.16 |