누적합(Prefix sum)란?
나열된 수의 누적된 합을 말한다.
배열의 일부 구간에서 대한 합을 매우 빠르게 구할 수 있게 해준다. N개의 원소로 이루어진 배열이 주어졌을 때 반복문을 통해 부분 배열의 합을 구하려면 O(N)이 걸리는데, 누적합을 이용하면 부분합을 0(N+M)으로 구할 수 있다.
설명
1차원 배열
arr을 순차 탐색하면서 sum 배열을 만들어주면 된다.
활용법
arr의 i항부터 j항 까지 합을 S(i,j)라고 하자.
이때 S(ij) = sum[j] - sum[i-1]이다.
S(2,4) = S[4]=S[1]이다. 쉽게 생각하면
참고문제)
https://www.acmicpc.net/problem/11659
해설)
2차원 배열
2차원 배열도 같은 방식이다. arr을 순차 탐색하면서, sum배열을 만들어주면 된다.
Sum[i][j]에는 arr[0][0]부터 arr[i-1][j-1]까지의 합이다.
sum 배열 만드는 공식
sumArray[i][j]=arr[i-1][j-1]+sumArray[i-1][j]+sumArray[i][j-1]-sumArray[i-1][j-1]
활용법
arr(x1,y1) 부터 arr(x2,y2)의 합을 S라고 할 때,
S = sum[x2][y2]-sum[x1-1][y2]=sum[x2][y1-1] + sum[x1-1][y1-1]
참고문제)
https://www.acmicpc.net/problem/11659
해설)
'Etc. > Algorithm' 카테고리의 다른 글
에라토스테네스(Eratosthenes)의 체 (0) | 2022.06.26 |
---|---|
[알고리즘] 슬라이딩 윈도우(sliding window) 알고리즘 이란? (0) | 2022.05.12 |
[알고리즘] Two Pointers 알고리즘이란? (0) | 2022.05.10 |
[알고리즘] Time Complexity(시간 복잡도) 알아보기 (0) | 2022.05.08 |
[알고리즘] JAVA (String, StringBuilder,List,Collections)메소드 정리 (0) | 2022.04.28 |