문제

더보기

수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.

 

입력

더보기

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다.

수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다.

 

출력

더보기

총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다.

 

풀이

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
# N과 M을 map형식으로 int형식의 input을 잡는다. split으로 문자열을 일정한 규칙으로 잘라서 리스트로 만들어 준다.
arr = list(map(int, input().split()))
# arr라는 변수를 선언 후 list형식으로 만든 map을 int형으로 input값을 입력받고 마찬가지로 문자열로 일정한 규칙으로 리스트로 만들어 준다.

sum_list = [0]
# 합배열의 변수를 선언해준다.

total = 0
# 변수를 선언해준다.

for i in range(len(arr)): # len으로 arr에 입력된 값 만큼 반복을 돈다
    total += arr[i] # 결국 total = total + arr[i]로 돈다.
    sum_list.append(total) # 결국 sum_list라는 합배열의 변수에 append로 추가를 한다.

for _ in range(M):
    #함수에서 반환된 일부 값에 관심이 없으면 변수 이름 대신 밑줄을 사용합니다.
    #기본적으로 이는 루프가 지금까지 몇 번이나 실행되는지에 관심이 없다는 의미이며 단지 전체적으로 특정 횟수만큼 실행되어야 한다는 것입니다.
    i, j = map(int, input().split()) # i, j를 입력받는다.
    print(sum_list[j] - sum_list[i - 1]) # 추가로 공식을 이용하여 사용하면 된다.
    # 공식 : S[i] - S[i-1]형식으로 풀면된다.