반응형
문제
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
import sys
N,M=map(int,sys.stdin.readline().split())
num_list=list(map(int,sys.stdin.readline().split()))
sum=[]
sum.append(0)
for x in range(1,N+1):
sum.append(sum[x-1]+num_list[x-1])
for _ in range(M):
i,j=map(int,sys.stdin.readline().split())
print(sum[j]-sum[i-1])
※ 누적 합
● 수의 개수 N과 합을 구해야 하는 횟수 M을 저장한다. 그 후 입력되는 N개의 수를 num_list배열에 넣어주고, 빈 sum 배열을 정의해준 뒤 sum에 0을 append 해준다. sum[x]에는(x>=1) num_list[x-1] 까지 수의 합이 저장된다.
● x는 1부터 N까지 돈다. 각 단계에서는 현재 보고있는 num_list의 숫자와 이 숫자 전까지의 누적합을 더한 값을 차례대로 sum에 append 해준다. 그럼 이 단계에선 현재 보고있는 num_list 숫자 까지의 누적합이 sum에 append 된 것이다. (sum.append(sum[x-1]+num_list[x-1]))
● 그 후 합을 구해야 하는 구간 i와 j를 총 M번 입력받는다. 각 i와 j를 입력받은 뒤 이 구간의 합은 sum[j] 에서 sum[i-1]을 빼주면 구간 i부터 j까지의 누적합을 구할 수 있다. sum[j]-sum[i-1] 값을 출력해주면 답을 구할 수 있다.
반응형
'백준(baekjoon) > 실버' 카테고리의 다른 글
백준(baekjoon) 11660번: 구간 합 구하기 5(실버 1, 파이썬 PYTHON) - 누적 합 (2) | 2022.11.17 |
---|---|
백준(baekjoon) 2559번: 수열(실버 3, 파이썬 PYTHON) - 누적 합 (0) | 2022.10.09 |
백준(baekjoon) 11053번: 가장 긴 증가하는 부분 수열(실버 2, 파이썬 PYTHON) - 동적 계획법 1 (0) | 2022.09.28 |
백준(baekjoon) 2156번: 포도주 시식(실버 1, 파이썬 PYTHON) - 동적 계획법 1 (2) | 2022.09.27 |
백준(baekjoon) 10844번: 쉬운 계단 수(실버 1, 파이썬 PYTHON) - 동적 계획법 1 (0) | 2022.09.25 |