프로그래머스/Python
[프로그래머스] 연속 부분 수열 합의 개수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 7. 16. 13:00
728x90
반응형

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


2. 풀이과정
- 부분 수열의 합을 저장할 리스트를 생성한다. li = list()
- 각 부분 수열의 경우는 길이가 1부터 부분 수열 원소 크기까지 반복한다. for k in range(len(elements))
- 각 부분 수열의 시작을 나타내는 변수를 생성하고 초기화한다. i = 0
- 각 부분 수열의 끝을 나타내는 변수를 생성하고 각 경우별 길이만큼 떨어진 값을 저장한다. j = k + 1
- 각 길이별 경우는 모두 부분 수열 원소 크기만큼 그 합의 경우가 나오기 때문에 부분 수열 원소 크기만큼 연산을 반복한다. for _ in range(len(elements))
- 만약 부분 수열의 끝을 나타내는 값이 부분 수열의 원소 크기보다 같거나 크면 앞에서부터 부분 수열을 이어 해당 값을 더해줘야 한다. if (j >= len(elements))
- 따라서 시작부터 끝까지 합을 더하고 인덱스 0부터 끝에서 부분 수열 원소 크기를 뺀 인덱스까지 더하여 해당 값을 리스트에 추가한다. li.append(sum(elements[i : ]) + sum(elements[ : j - len(elements)]))
- 반면에 시작과 끝이 모두 부분 수열 원소의 크기 안에 있으면 else
- 그냥 시작부터 끝까지 원소를 더하여 그 값을 리스트에 추가한다. li.append(sum(elements[i : j]))
- 다음 부분 수열로 이동하여 연산을 계속하기 위해 각 시작 위치와 끝 위치를 1칸씩 이동한다. i += 1 j += 1
- 모든 경우의 합을 저장한 리스트에서 중복된 값을 제거하고 그 리스트의 길이를 저장한다. answer = len(set(li))
반응형
3. 소스코드
def solution(elements):
answer = 0
li = list()
for k in range(len(elements)):
i = 0
j = k + 1
for _ in range(len(elements)):
if (j >= len(elements)):
li.append(sum(elements[i : ]) + sum(elements[ : j - len(elements)]))
else:
li.append(sum(elements[i : j]))
i += 1
j += 1
answer = len(set(li))
return answer728x90
반응형