파이썬
[백준 파이썬] 11660번 구간 합 구하기
운으로
2022. 7. 30. 18:04
https://www.acmicpc.net/problem/11660
11660번: 구간 합 구하기 5
첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네
www.acmicpc.net
<코드>
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
dp = [[0 for _ in range(n+1)] for _ in range(n+1)]
arr = [list(map(int, input().split())) for _ in range(n)]
for i in range(n):
for j in range(n):
dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j] - dp[i][j] + arr[i][j]
for i in range(m):
x1, y1, x2, y2 = map(int, input().split())
result = dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1]
print(result)
<풀이방법>
좌표가 1,1이 시작이라서 0으로 감싼 dp 행렬을 만들고 (0,0) 부터 자기 좌표까지의 합을 dp에 저장한다.
x1,y1,x2,y2가 2,2,3,3이라고 가정하면
직사각형 전체 합 - 초록색 합 - 노란색 합 + 2번 빠진 부분을 더하면 원하는 빨간색 구간의 합을 구할 수 있다.
dp로 안 풀었다가 시간초과뜨고 sys.stdin 안 쓰니까 시간초과 떴다 ㅜㅜ