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

Halo·2025년 4월 15일
0

Algorithm

목록 보기
14/85
post-thumbnail

🔍 Problem

백준 11659

이 문제는 N개의 숫자들이 주어졌을 때, i부터 j까지의 수들을 구하는 문제이다. 누적합을 구해서 풀어본다. 예를들어 2번째 누적합은 1번째 수 + 2번째 수 이다. 만약 i번째 누적합은 i번째까지 구해지고 그렇다면 i번재부터 j번째 까지의 누적합은 j번재 까지의 누적합에서 i번재까지의 누적합은 j번째에서 i-1번째 까지의 누적합을 구하면된다.


📒 해결과정

가. 누적합을 구해서 i번째부터 j번째까지 구해야지.

나. 누적합을 저장할 배열을 선언해야지.

다. i번재부터 j번째이면 j번째 누적합에서 몇번째 누적합을 빼야할지를 찾아야겠지.

i번째 누적합을 빼면 되겠다고 생각하면 되겠지만 그렇지않다. i-1번째 누적합을 빼줘ㅕ야 한다.


💻 Code

import sys

N,M=map(int, sys.stdin.readline().split())  


P=[0]*N

def set_P(arr):
    P[0]=arr[0]
    for i in range(1,len(arr)):
        P[i]=arr[i]+P[i-1]

arr=list(map(int,sys.stdin.readline().split()))
set_P(arr)

def Get_Pre_Sum(P,i,j):
    if i==0:
        return P[j]
    else:
        return P[j]-P[i-1]

for _ in range(M):
    i,j=map(int,sys.stdin.readline().split())
    i-=1
    j-=1
    print(Get_Pre_Sum(P,i,j))
profile
새끼 고양이 키우고 싶다

0개의 댓글