인덱스 오류가 날 가능성이 높기 때문에 웬만하면 padding 을 해주는 것이 좋습니다.
문제 풀이 전략
예를 들어 (2, 2) ~ ( 3, 3) 까지의 합을 구하고 싶다고 하면
(3, 3) 까지의 합에서 파란색 부분을 빼고 중복되는 검정 부분을 한번 더해주면 되겠습니다.
그 코드는 다음과 같이 나올 수 있겠지요?
여기서 ,i, j 는 시작점 , x, y, 는 끝 점입니다.print(sumList[x][y] - sumList[i-1][y] - sumList[x][j-1] + sumList[i-1][j-1])
n, m = map(int, input().split())
dpList = []
for i in range(n):
dpList.append(list(map(int, input().split())))
k = int(input())
sumList = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, m+1):
sumList[i][j] = dpList[i-1][j-1] + sumList[i][j-1] + sumList[i-1][j] - sumList[i-1][j-1]
indexList = []
for h in range(k):
i, j, x, y = map(int, input().split())
print(sumList[x][y] - sumList[i-1][y] - sumList[x][j-1] + sumList[i-1][j-1])