728x90
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
누적합 알고리즘을 알고있다면 간단한 문제였습니다.
def solution(N, M, num_list, data_list):
# 누적합 리스트 만들기
sum_list = make_sum_list(N, num_list)
# i ~ j 구간의 합은 (j 까지의 누적합) - (i-1 까지의 누적합)
for i, j in data_list:
print(sum_list[j] - sum_list[i-1])
def make_sum_list(N, num_list):
# 누적합 리스트
sum_list = [0 for _ in range(N+1)]
i = 1
while True:
# 종료 조건
if i == N+1:
return sum_list
# 이전까지의 누적합에 현재 수 합하기
sum_list[i] = sum_list[i-1] + num_list[i]
i += 1
N, M = map(int, input().split())
num_list = [0] + list(map(int, input().split()))
data_list = [list(map(int, input().split())) for _ in range(M)]
solution(N, M, num_list, data_list)
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 12852 <1로 만들기 2> Python (1) | 2023.11.01 |
---|---|
백준 11726 <2Xn 타일링> Python (0) | 2023.10.31 |
백준 2579 <계단 오르기> Python (0) | 2023.10.30 |
백준 1149 <RGB 거리> Python (1) | 2023.10.30 |
백준 1463 <1로 만들기> Python (0) | 2023.10.29 |