https://www.acmicpc.net/problem/11660
이 문제는 정수가 쓰여진 표가 주어지고 x1,y1부터 x2,y2까지의 구간합을 구하는 문제이다. 이 문제에서 구해야 하는 횟수가 최대 십만번 이므로 필자는 미리 각 점에서의 구간합들을 구하고, 표에서 구해야 하는 구간합만 구하는 식을 이용하여 답을 찾아냈다. 이 식은 다음 표를 이용하여 구했다.
먼저 우리는 0,0부터 x,y까지의 구간합을 구한 테이블을 구해야 한다. 이는 간단히 구할 수 있으니 패스하겠다.
위 그림을 보면 x2,y2와 x1,y1 사이의 구간합은 노란색이다. 이 노란색을 구하는 법은 (x2,y2) - (x1-1,y2)-(x2,y1-1) + (x1,y1)이다. 이러한 것들을 그냥 코드로 구현하면,
import sys
input = sys.stdin.readline
L,t = map(int,input().rstrip().split())
table = []
matrix = [[0 for a in range(L+1)] for b in range(L+1)]
for _ in range(L):
table.append(list(map(int,input().rstrip().split())))
for a in range(1,L+1):
for b in range(1,L+1):
if a==1 and b==1:
matrix[a][b] = table[a-1][b-1]
elif a==1:
matrix[a][b] = matrix[a][b-1] + table[a-1][b-1]
elif b==1:
matrix[a][b] = matrix[a-1][b] + table[a-1][b-1]
else:
matrix[a][b] = matrix[a][b-1]+matrix[a-1][b] - matrix[a-1][b-1] + table[a-1][b-1]
for i in range(t):
x1,y1,x2,y2 = map(int,input().rstrip().split())
print(matrix[x2][y2]-matrix[x1-1][y2]-matrix[x2][y1-1]+matrix[x1-1][y1-1])
'문제해결(PS) > 백준(BOJ)' 카테고리의 다른 글
백준 2096 내려가기 (0) | 2025.01.07 |
---|---|
백준 1916 최소비용 구하기 (0) | 2025.01.05 |
백준 9465 스티커 (1) | 2025.01.01 |
백준 1991 트리 순회 (1) | 2024.12.29 |
백준 1932 정수 삼각형 (0) | 2024.12.28 |