구간마다 합을 계산하지 않고 미리 저장하여 꺼내 씀으로써 시간복잡도 감소
합 배열 S : S[i] = S[i-1]+A[ i]
j ~ i구간 합 : sumList[j] - sumList[i-1]
일차원 배열의 구간 합
# num : 데이터 리스트 / sumList : 합 배열 -> 인덱스 서로 맞추기 위해 0 미리 넣음
num = []
sumList = [0]
Sum = 0
for a in range(N):
Sum+=num[a]
sumList.append(Sum)
# prefix_sum : 구간 합(i~j까지)
prefix_sum = sumList[j] - sumList[i-1]
이차원 배열의 구간 합
# A : 데이터 리스트 -> 인덱스 서로 맞추기 위해 0 미리 넣음
A = [[0] * (n+1)]
for i in range(n):
A_row = [0]+[int(x) for x in input().split()]
A.append(A_row)
# D : 합 배열 -> 인덱스 서로 맞추기 위해 0 미리 넣음
D = [[0] * (n+1) for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,n+1):
D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j]
# result : 구간 합 - (x1,y1) ~ (x2,y2)
result = D[x2][y2] - D[x1-1][y2] -D[x2][y1-1]+D[x1-1][y1-1]