백준 - 11659

GGob2._.·2023년 6월 8일
0

algorithm

목록 보기
25/55

문제 설명

구간 합을 구하는 문제이며, 주어진 수와 범위 내에서 인덱스가 주어졌을 때, 해당 구간 합을 출력하는 방식이다.

예)
5 3
5 4 3 2 1
1 3 --> 12 출력 (5+4+3)
2 4 -->   9 출력 (4+3+2)
5 5 -->   1 출력 (1)

접근 방식

구간 합에 대한 기본 개념을 까먹고 있었고, 주어진 범위를 그때마다 더하려고 했으나, NM의 범위가 1부터 10만까지임을 확인하고, 다른 방식으로 접근했다.

  1. 주어진 리스트의 요소들을 하나씩 더한 새로운 리스트를 만들자!

  2. 아무것도 더하지 않은 상태를 0으로 생각하고, [0]의 리스트를 생성한다.

  3. 주어진 수 리스트를 하나씩 더해 리스트에 추가한다.
    예) 5 4 3 2 1 -> [0, 5, 9, 12, 14, 15] 생성

  4. 범위가 주어지면, (큰 인덱스 - (작은 인덱스 -1))을 수행한다.
    -1을 수행하는 이유는 초기 값인 0이 포함되어 있기 때문이다.

작성한 코드

import sys

input = sys.stdin.readline

n, m = map(int, input().split())
num_list = list(map(int, input().split()))

num_list_sum = [0]
sum_value = 0 

for j in num_list:
    sum_value += j
    num_list_sum.append(sum_value)

for i in range(m):
    a, b = map(int, input().split())
    print(num_list_sum[b] - num_list_sum[a-1])

profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글