import sys
input = sys.stdin.readline
n, m = map(int, input().split()) # 수의 개수 n, 합을 구해야 하는 횟수 m
numbers = list(map(int, input().split())) # n개의 수
# dp 리스트 만들기
dp = [0 for _ in range(n+1)]
for i in range(n):
dp[i+1] = dp[i] + numbers[i]
for _ in range(m):
i, j = map(int, input().split())
print(dp[j] - dp[i-1])
풀이
- 먼저
dp[i+1]에numbers[i]까지(numbers[:i+1])의 합을 저장하여 dp리스트를 만든다. i와j가 주어졌을 때,i는 구간의 시작j는 구간의 끝이니dp[j] - dp[i-1]을 하면 해당 구간의 합을 구할 수 있다.
Python과 그냥 PyPy를 써도 시간초과가 나서 import sys를 해야 겨우 시간초과의 늪에서 빠져나올 수 있는 문제였다.
'Algorithm > Baekjoon' 카테고리의 다른 글
| [Python] 11053. 가장 긴 증가하는 부분 수열 (0) | 2021.09.26 |
|---|---|
| [Python] 2579. 계단오르기 (0) | 2021.09.23 |
| [Python] 1904. 01타일 (0) | 2021.09.19 |
| [Python] 9095. 1, 2, 3 더하기 (0) | 2021.09.19 |
| [Python] 2103. 이친수 (0) | 2021.09.19 |