반응형
문제
N개의 수 A1, A2, ..., AN이 입력으로 주어진다. 총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는 각 구간을 나타내는 i와 j가 주어진다. (1 ≤ i ≤ j ≤ N)
출력
총 M개의 줄에 걸쳐 입력으로 주어진 구간의 합을 출력한다.
예제 입력 15
10 20 30 40 50 5 1 3 2 4 3 5 1 5 4 4 |
예제 출력 160
90 120 150 40 |
예제 입력 23
1 0 -1 6 1 1 2 2 3 3 1 2 2 3 1 3 |
예제 출력 21
0 -1 1 -1 0 |
풀이
누적 합으로 주어진 구간의 합을 빠르게 구하는 문제이다.
주어진 1차원 리스트 A를 왼쪽부터 차례로 더해 인덱스 0부터 현재까지의 합을 담도록 바꾼다.
이후, 범위 i, j 가 주어지면 A[j] - A[i] 를 하면 구간의 합을 구할 수 있다.
import sys
input = sys.stdin.readline
n = int(input())
lst = [0]
for i in map(int,input().split()):
lst.append(lst[-1] + i)
for _ in range(int(input())):
a, b = map(int,input().split())
print(lst[b] - lst[a-1])
반응형
'알고리즘 연습 > 누적 합' 카테고리의 다른 글
[🥇3 / 백준 10986 / 파이썬] 나머지 합 (0) | 2022.05.17 |
---|---|
[🥈1 / 백준 16139 / 파이썬] 인간-컴퓨터 상호작용 (2) | 2022.05.08 |
[🥈4 / 백준 13900 / 파이썬] 순서쌍의 곱의 합 (0) | 2022.02.23 |
[🥉1 / 백준 2167 / 파이썬] 2차원 배열의 합 (0) | 2022.01.10 |
[🥈1 / 백준 11660 / 파이썬] 구간 합 구하기 5 (0) | 2021.10.09 |