알고리즘
Prefix sum
컴영
2020. 8. 1. 12:34
Prefix sum (구간합) Algorithm
- 구간 합이란? 배열 전체 값 중 L ~ R 번째 원소 구간의 합을 의미
- 구현 방법 : Prefix sum algorithm은 데이터 원소들을 누적해서 합한 값을 이용한다.
a1, a2, ..., aN 전체 N개의 숫자들이 있을 때 prefix sum의 i번째 값을 구하면
Pi = a1 + a2 + a3 + ... + ai
ex) 숫자 5개가 있다고 하자. {1,2,3,4,5}; 그러면
prefix[6] = {0,1,3,4,10,15};
만약 1번째부터 3번째까지 합을 구하고 싶다면 : prefix[3] - prefix[1-1] = 4 - 0 = 4 이런식으로 계산.
=> prefix sum의 차로 구간합을 계산한다.
L ~ R까지 합을 구하고 싶으면
sum = prefix[R] - prefix[L-1]
- 구현 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> using namespace std; int N; int sum[11]; int main() { scanf("%d", &N); for (int i = 1; i <= 10; i++) { int temp; scanf("%d",&temp); sum[i] = sum[i - 1] + temp; } for (int i = 0; i < N; i++) { int a, b; // 구하려는 구간 합 범위 (a~b) scanf("%d %d", &a, &b); printf("%d\n", sum[b] - sum[a-1]); } return 0; } | cs |
- 두 값의 차를 구하는 것이므로 O(1) 시간에 구간합을 구할 수 있다.