본문 바로가기
Algorithm

구간 합 계산 (Prefix Sum)

by 안자바먹지 2021. 1. 5.
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

댓글