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

JIN·2021년 12월 21일
0
post-thumbnail

2차원 DP

인덱스 오류가 날 가능성이 높기 때문에 웬만하면 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])

profile
배우고 적용하고 개선하기

0개의 댓글