Coding Test/BaekJoon_Python

백준 11659 <구간 합 구하기 4> Python

JunOnJuly 2023. 10. 31. 23:01
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