본문 바로가기
문제 풀이/백준

[백준] 2167번 2차원 배열의 합

by ginny. 2024. 6. 20.

 

 

해결

import sys
input=sys.stdin.readline

n,m=map(int,input().split())
arr=[list(map(int,input().split())) for _ in range(n)] #입력 받은 2차원배열

S=[[0 for _ in range(m+1)] for __ in range(n+1)] #원래 배열보다 행,열(위 한칸,왼쪽 한칸) 더 만들어 0으로 채워두고 시작


for i in range(1,n+1):
    for j in range(1,m+1):
        S[i][j]=S[i-1][j]+S[i][j-1]-S[i-1][j-1]+arr[i-1][j-1] #2차원 누적합 배열 S 만들기


k=int(input().rstrip())
for _ in range(k):
    i,j,x,y=map(int,input().split())
    res=S[x][y]-S[x][j-1]-S[i-1][y]+S[i-1][j-1]  #누적합 배열 S 이용해 각각 부분합 구하기 
    print(res)

댓글