문제
N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.
예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
| 3 | 4 | 5 | 6 |
| 4 | 5 | 6 | 7 |
여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.
표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오.
풀이
앞에서 풀었던 구간 합 구하기 4와 같이 prefixsum을 미리 구해서 리스트에 넣고, 나중에 필요한 좌표에서의 누적합을 print 하면 된다!

import sys
N, M = map(int, sys.stdin.readline().split())
array = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
# array에 반대로 넣어야 함
prefix = [[0] * (N+1) for _ in range(N+1)]
for i in range(1, N+1):
for j in range(1, N+1):
prefix[i][j] = prefix[i][j-1] + prefix[i-1][j] - prefix[i-1][j-1] + array[i-1][j-1] # 마지막은 겹치는 부분
for _ in range(M):
x1, y1, x2, y2 = map(int, sys.stdin.readline().split())
print(prefix[x2][y2] - prefix[x1-1][y2] - prefix[x2][y1-1] + prefix[x1-1][y1-1])'Algorithm > 문제 풀이' 카테고리의 다른 글
| [Programmers] LV3. 가장 긴 팰리드롬 (0) | 2023.12.20 |
|---|---|
| [Programmers] LV2. 뒤에 있는 큰 수 찾기 (1) | 2023.12.19 |
| [Backjoon 1629] 곱셈 (0) | 2022.10.31 |
| [Backjoon 11724] 연결 요소의 개수 (0) | 2022.10.30 |
| [Backjoon 11659] 구간 합 구하기 4 (0) | 2022.10.30 |