DHistory

[Baekjoon] DP - 11660 구간 합 구하기 5 본문

Computer Science/Algorithm

[Baekjoon] DP - 11660 구간 합 구하기 5

ddu0422 2023. 9. 26. 22:43

문제

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net

 

풀이

import sys

n, m = map(int, sys.stdin.readline().rstrip().split())
numbers = []
for _ in range(n):
    data = list(map(int, sys.stdin.readline().rstrip().split()))
    numbers.append(data)
coordinates = []
for _ in range(m):
    coordinate = list(map(int, sys.stdin.readline().rstrip().split()))
    coordinates.append(coordinate)


def solution(coordinates, a):
    result = []
    n = len(a)
    d = [[0 for _ in range(n + 1)] for _ in range(n + 1)]

    # 1,1부터 n,n까지 누적된 구역의 합을 구한다.
    for i in range(1, n + 1):
        for j in range(1, n + 1):
            d[i][j] = d[i - 1][j] + d[i][j - 1] - d[i - 1][j - 1] + a[i - 1][j - 1]

    # 구하는 영역을 제외한 나머지 영역을 뺀다 (중복으로 제외한 영역을 더해준다.)
    for x1, y1, x2, y2 in coordinates:
        result.append(
            d[x2][y2] - d[x2][y1 - 1] - d[x1 - 1][y2] + d[x1 - 1][y1 - 1]
        )

    return result


print(*solution(coordinates, numbers), sep='\n')

 

채점 결과

'Computer Science > Algorithm' 카테고리의 다른 글

[Baekjoon] DP - 1890 점프  (0) 2023.10.25
[Baekjoon] DP - 1309 동물원  (0) 2023.10.24
[Baekjoon] DP - 9465 스티커  (0) 2023.09.26
[Baekjoon] DP - 10844 쉬운 계단 수  (0) 2023.09.26
[Baekjoon] DP - 1149 RGB 거리  (0) 2023.09.26