누적 합계란 무엇인가?
i번째 요소까지의 누적 합계(cumulative sum)란 리스트의 0번째 요소부터 i번째 요소까지의 값을 모두 더한 총합을 의미합니다.
이 프로그램의 목표는 주어진 리스트를 바탕으로 새로운 리스트를 만드는 것입니다. 새 리스트의 i번째 요소는 원본 리스트에서 0번째부터 i번째 요소까지의 누적 합이 됩니다.
예시
입력
[10,20,30,40,50]
출력
[10,30,60,100,150]
입력
[1,2,3,4,5]
출력
[1,3,6,10,15]
알고리즘 동작 방식
- 입력 리스트를 cumSum() 함수에 전달하면 함수가 누적 합계 리스트를 반환합니다.
- 요소를 추가해 나갈 빈 리스트 cum_list를 선언합니다.
- 합계 변수 sm을 0으로 초기화합니다.
- 입력 리스트를 순회하면서 각 반복마다 이전 합계 값에 현재 요소를 더해 합계를 갱신합니다.
- 매 반복마다 갱신된 합계 값을 cum_list에 추가(append)합니다.
- 따라서 i번째 반복 시점에는 sm 변수에 0번째부터 i번째 요소까지의 합이 저장되며, 이 값이 cum_list에 추가됩니다.
- 리스트 전체 순회가 끝나면 완성된 cum_list를 반환합니다.
예제 코드
def cumSum(s): sm=0 cum_list=[] for i in s: sm=sm+i cum_list.append(sm) return cum_list a=[10,20,30,40,50] print(cumSum(a))
실행 결과
[10, 30, 60, 100, 150]
더 간단한 방법: itertools.accumulate 활용하기
Python 표준 라이브러리인 itertools 모듈의 accumulate() 함수를 사용하면 위 로직을 한 줄로 구현할 수 있습니다.
from itertools import accumulate a = [10, 20, 30, 40, 50] result = list(accumulate(a)) print(result)
accumulate()는 입력 이터러블의 각 위치까지의 누적 합을 차례대로 생성하므로, 직접 반복문을 작성하는 것보다 코드가 간결하고 가독성이 뛰어납니다. 대량의 데이터를 다룰 때도 안정적으로 동작하므로 실무에서 자주 활용되는 방식입니다.