728x90
http://wwww.acmicpc.net/problem/11659
# 조건
- 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램 작성하시오
- 첫 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다.
- 둘쨰 줄에는 N개의 수가 주어진다.ㅣ
- 수는 1,000보다 작거나 같은 자연수
- 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.
# 접근 방법
- slicing을 통하여 합을 구해주면 된다.
- 이 때, slicing의 시작 구간 -1을 해주어야 한다.
위와 같이 하면 시간초과
- 따라서 누적합을 구해준다.
- 즉, 처음에 한 번 누적합 리스트를 구해준 후 B까지의 합에서 A-1까지의 합을 빼준다.
import sys
N, M = map(int, sys.stdin.readline().split())
nums = [0] + list(map(int, sys.stdin.readline().split()))
for i in range(1, len(nums)):
nums[i] += nums[i-1]
for _ in range(M):
A, B = map(int, sys.stdin.readline().split())
print(nums[B] - nums[A - 1])
728x90
'ALGORITHM > 수학, 기하학' 카테고리의 다른 글
[백준 15652번] N과 M(4) (0) | 2022.11.07 |
---|---|
[백준 2407번] 조합 (0) | 2022.11.05 |
[백준 1711번] 파이썬 - 직각삼각형 (1) | 2022.10.03 |
[백준 1198번] 파이썬 - 삼각형으로 자르기 (0) | 2022.10.02 |
[백준 1002번] 파이썬 - 터렛 (0) | 2022.10.02 |