문제
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
풀이
구간합을 구하는 단순한 문제이다. 이 문제의 경우 미리 구간합을 구해놓고 필요한 구간마다 SUM[right] - SUM[left - 1]로 구간합을 계산할 수 있다. 처음에 시간초과 떠서 다른 정답 코드와 비교했는데 거의 똑같았고 다른 점은 데이터를 입력받을 때 input으로 받았는지 sys.readline으로 받았는지에 대한 차이였다. 후자가 빠른 것을 알고 있었으나 영향을 크게 주지 않을거라 생각해서 input으로 풀었는데 시간초과가 나버렸다!
import sys
N, M = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))
sum = 0
prefix = [0]
for i in data:
sum += i
prefix.append(sum)
for _ in range(M):
i, j = map(int, sys.stdin.readline().split())
print(prefix[j] - prefix[i - 1])
'Algorithm > 문제 풀이' 카테고리의 다른 글
| [Backjoon 1629] 곱셈 (0) | 2022.10.31 |
|---|---|
| [Backjoon 11724] 연결 요소의 개수 (0) | 2022.10.30 |
| [Backjoon 5525] IOIOI (0) | 2022.10.30 |
| [Backjoon 1764] 듣보잡 (0) | 2022.10.29 |
| [Backjoon 2667] 단지번호붙이기 (0) | 2022.10.29 |