🗝️ Algorithm/🟩 백준

🟩 [백준] [Python] [Silver1] 11660번_구간 합 구하기 5

Dbswnstjd 2023. 3. 25. 22:48

문제

https://www.acmicpc.net/problem/11660

풀이

# 백준 11660번 문제 - 구간 합 구하기 5
n, m = map(int, input().split())

graph = []
graph = [list(map(int, input().split())) for _ in range(n)]

dp = [[0] * (n+1) for _ in range(n+1)]
for i in range(1, n+1):
    for j in range(1, n+1):
        dp[i][j] = dp[i-1][j]+ dp[i][j-1] - dp[i-1][j-1] + graph[i-1][j-1]

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)

처음에 이해를 하는데 애를 먹어서 다른 풀이를 찾아보았다. 

가장 쉽게 이해할 수 있었던 풀이는 영역을 나누어서 x1, x2, y1, y2 좌표를 보고 공통되는 부분을 다시 더해주는 풀이었다. 

DP 문제는 많이 풀어봐야겠다. 

** sys 모듈을 사용하지 않으면 시간초과가 나게 된다.