728x90
구간 합 빠르게 계산하기
Prifix Sum이란 리스트의 앞에서부터 특정 위치까지의 합을 의미한다.
문제
N개의 정수로 구성된 수열이 있고, M개의 쿼리 정보가 주어진다.
각 쿼리는 L과 R로 구성된다. [L, R] 구간에 해당하는 데이터들의 합을 모두 구하는 문제이다.
시간제한은 O(N+M) 이다.
원리
1. Prefix Sum을 계산하여 임의의 배열 P에 저장한다.
2. 매 M개의 쿼리 정보를 확인할 때, 구간 합은 P[R] - P[L - 1] 이다.
10 | 20 | 30 | 40 | 50 |
Prefix Sum을 계산하면 아래와 같다.
0 | 10 | 30 | 60 | 100 | 150 |
P[0] | P[1] | P[2] | P[3] | P[4] | P[5] |
코드
# 데이터 개수 n과 데이터 입력
n = 5
data = [10, 20, 30, 40, 50]
# Prefix Sum 계산
sum = 0
prefix_sum = [0] # 초기 값은 0이다.
for i in data:
sum += i
prefix_sum.append(sum)
# 구간 합 계산
left = 3
right = 4
print(prefix_sum[right] - prefix_sum[left - 1])
728x90
'Algorithm' 카테고리의 다른 글
(백준) 뱀 (0) | 2021.01.06 |
---|---|
(leetcode) two-sum (0) | 2021.01.05 |
투 포인터 (two pointer) 기법 (0) | 2021.01.05 |
(카카오) 무지의 먹방 라이브 - javascript (0) | 2021.01.05 |
(leetcode) Group Anagrams (0) | 2021.01.04 |
댓글