본문 바로가기
코딩테스트 문제풀이/beakjoon

[백준] 11659 구간 합 구하기 4

by merona99 2021. 8. 16.
반응형

백준 11659번 구간 합 구하기 4

투 포인터 / 누적 합

 

 

 

 

[문제]

 

 

 

리스트가 주어졌고 구간의 합을 구하는 문제임을 파악하자.

 

구간의 합 알고리즘을 넣지 않으면 시간초과가 나는 문제이다.

 

기본적으로 M개의 쿼리가 수행할 때마다 전체 리스트의 구간 합을 모두 계산하는 경우는 O(NM)의 시간복잡도를 가진다.

하지만 N개의 리스트의 각 구간에 대해서 합산값을 미리 구해놓으면 O(N+M)의 시간복잡도를 가진다.

즉, 접두사 합을 이용해 시간초과를 해결할 수 있다.

 

 

 

[과정]

 

  1. 리스트의 각 구간에 대해서 접두사 합을 계산하여 배열(prefix_sum)에 저장
  2. 쿼리를 수행

 

 

 

[소스코드]

 

# 구간 합 구하기 4

import sys
input = sys.stdin.readline

n,m = map(int, input().split())
data = list(map(int, input().split()))
query = []

for i in range(m):
    x,y = map(int, input().split())
    query.append([x,y])
    
sum_value = 0
prefix_sum = [0]

for i in data:
    sum_value += i
    prefix_sum.append(sum_value)

for x,y in query:
    print(prefix_sum[y]-prefix_sum[x-1])

 

 

 


 

 

[통과]

 

 

 

반응형

'코딩테스트 문제풀이 > beakjoon' 카테고리의 다른 글

[백준] 14502 연구소  (0) 2021.08.16
[백준] 21921 블로그  (0) 2021.08.16
[백준] 11728 배열 합치기  (0) 2021.08.13
[백준] 1167 트리의 지름  (0) 2021.08.07
[백준] 1991 트리 순회  (0) 2021.08.07

댓글