728x90
누적합, 구간합
- 배열의 일부 구간에 대한 합을 빠르게 구할 수 있음
- N개의 원소의 합을 구하는 경우
- 완전 탐색으로 구하면 O(N)
- 구간합으로 구하면 O(1)
1차원 배열
- sum이라는 리스트를 만들어서 sum[i]에 arr[0] ~ arr[i-1] 의 합을 저장
- 0 부터 i 까지의 합을 구하고 싶은 경우 : sum[i+1]
- i 부터 j 까지의 합을 구하고 싶은 경우 : sum[j+1] - sum[i]
2차원 배열
- sum이라는 리스트를 만들어서 sum[i][j]에 arr[0][0] ~ arr[i-1][j-1] 의 합을 저장
- (0, 0) 부터 (i, j) 까지의 합을 구하고 싶은 경우 : sum[i+1][j+1]
- sum 리스트를 만드는 방법?
# arr는 n*n 배열
# 1. 행단위로 더하고 열단위로 더하기 -> n*n 반복문을 2번 돌려야함
# 2.
sum = [[0 for _ in range(n+1)] for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, n+1):
sum[i][j] = arr[i-1][j-1] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1]
728x90
'ALGORITHM > 개념 정리' 카테고리의 다른 글
[Algorithm] 다익스트라(dijkstra) 알고리즘 (0) | 2021.10.21 |
---|---|
[Algorithm] 최소 신장 트리 (MST) (0) | 2021.10.21 |
[Algorithm] 서로소(상호배타) 집합 (Disjoint-sets) (0) | 2021.10.20 |
[Algorithm] 그래프 (0) | 2021.10.20 |
[Algorithm] 병합 정렬, 퀵 정렬 (0) | 2021.10.06 |
댓글