원리 · intermediate

누적합·차분 배열

구간 합을 O(1)로, 구간 갱신을 차분으로.

배우기 · 알고리즘 원리 · 18분 · 8/14 · prefix · array

이 트랙 목차 (14)
  1. 1. 시간·공간 복잡도 (Big-O) 제대로 읽기
  2. 2. 투포인터: 양끝·같은방향
  3. 3. 해시맵·해시셋: 빠른 조회
  4. 4. 스택·큐: LIFO와 FIFO
  5. 5. 재귀와 이분 탐색
  6. 6. 슬라이딩 윈도우
  7. 7. 동적 계획법 입문 (DP)
  8. 8. 누적합·차분 배열
  9. 9. 그래프 탐색: BFS·DFS
  10. 10. 정렬을 언제 쓰나: 전처리·이분·그리디
  11. 11. 그리디: 탐욕 선택과 반례
  12. 12. 행렬·격자: 인덱싱과 방문
  13. 13. 비트 연산 기초: AND OR XOR · 플래그
  14. 14. 우선순위 큐·힙 감각

누적합 (prefix sum)

배열 a[0..n)의 구간 합 a[l]+…+a[r-1]을 여러 번 물을 때.

pref[0] = 0
pref[i+1] = pref[i] + a[i]
sum(l, r) = pref[r] - pref[l]

전처리 O(n), 질의 O(1).

const pref = new Array(n + 1).fill(0);
for (let i = 0; i < n; i++) pref[i + 1] = pref[i] + a[i];
function sum(l, r) { return pref[r] - pref[l]; }

2차원 맛보기

격자 구간 합도 비슷한 아이디어입니다.
모서리 포함 관계를 그림으로 확인하세요 (오프바이원 천국).

차분 배열

같은 값으로 구간 [l, r)에 더하기를 여러 번 할 때:

diff[l] += v
diff[r] -= v

마지막에 누적하면 결과 배열이 됩니다. 갱신 O(1), 최종 O(n).

언제 쓰나

함정

구간 합 질의 예

배열 2 3 5 7, 구간 [1, 4) 합 = 3+5+7=15.

pref: 0 2 5 10 17
pref[4]-pref[1]=15

차분으로 구간 가산 예

초기 0열, [1,3)에 +5 두 번:

diff: 0 +5 0 -5 0
누적: 0 5 5 0 0

관련

슬라이딩 윈도우 합은 “이동하는 구간 합”이고, 누적합은 “임의 구간 합”입니다.
둘 다 구간을 O(1)에 가깝게 다루려는 도구입니다.

더 깊게

읽은 뒤 연습장에서 예제 코드를 한 번 타이핑해 보세요. 눈으로만 보면 하루 뒤 사라집니다.

관련 원리 카드와 문제 태그로 바로 이어서 풀면, 문법·패턴이 한 묶음으로 남습니다.

막히면 30분 규칙: 입력을 로그로 확인 → 기대/실제 한 줄 비교 → 그래도 안 되면 배우기 레슨으로 잠시 복귀.

관련 짧은 원리

관련 문제