-
[Python]백준 11441/합 구하기 / 누적합algorithm/문제 2022. 3. 14. 16:01반응형
https://www.acmicpc.net/problem/11441
⚡️ 문제 설명
총 M개의 구간 i, j가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램
⚡️ 해결 방법
처음에
for _ in range(m): i,j=map(int,input().split()) print(sum(A[i-1:j]))
이렇게 코드를 작성하여 더하였더니 시간초과가 발생하였다.
시간초과를 해결하기 위해서는 누적합을 구해야한다.
#누적합
B=[0]*(n+1) for i in range(1,n+1): B[i]=B[i-1]+A[i-1]
A=[10,20,30,40,50]일 때에
누적합 리스트 B=[0,10,30,60,100,150] 이다.
i,j가 1,3일 때는
B[3]-B[0]을 구하면 정답이 된다.
⚡️ 코드
import sys input = sys.stdin.readline n=int(input()) A=list(map(int,input().split())) m=int(input()) #누적합 B=[0]*(n+1) for i in range(1,n+1): B[i]=B[i-1]+A[i-1] for _ in range(m): i,j=map(int,input().split()) print(B[j]-B[i-1])
반응형'algorithm > 문제' 카테고리의 다른 글
[Python]백준 9663번/N-Queen/백트래킹 (0) 2023.03.31 [Python]백준 13335번/트럭/queue (0) 2023.03.29 [Python]백준 11053/가장 긴 증가하는 부분 수열/LIS/dp (0) 2022.03.13 [Python]백준 14502/연구소 / 조합 / 배열 복사 copy (0) 2022.03.12 [Python]백준 15649/N과 M(1)(2)(3)(4) / itertools (0) 2022.03.12