https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
# 11659 - Python 3
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
arr = list(map(int, input().split()))
pfs = [0] # pfs list에 미리 0을 추가하여 line 20에서 혼동 방지
answer = []
summ = 0
for i in arr:
summ += i
pfs.append(summ) # 누적합(prefix sum)
for _ in range(m):
x, y = map(int, input().split())
answer.append(pfs[y] - pfs[x - 1])
for i in answer:
print(i)
< 누적합 알고리즘 >
- 입력을 받을 때 마다 각 구간의 합을 구하는 것이 아닌, 각 구간까지의 합을 미리 구하고 계산하는 알고리즘
: pfs(prefix sum)을 통하여 원래의 코드보다 시간 단축
'코딩' 카테고리의 다른 글
| [Python] 백준 #11866. 요세푸스 문제 0 (0) | 2023.03.24 |
|---|---|
| [Python] 백준 #2559. 수열 (0) | 2023.03.22 |
| [Python] 백준 #2558. A + B - 2 (0) | 2023.03.22 |
| [Python] 백준 #11399. ATM (0) | 2023.03.22 |
| [Python] 백준 #2355. 시그마 (0) | 2023.03.22 |