Skip to content

Commit fda7000

Browse files
committed
[Silver I] Title: 구간 합 구하기 5, Time: 288 ms, Memory: 129504 KB -BaekjoonHub
1 parent c00d478 commit fda7000

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# [Silver I] 구간 합 구하기 5 - 11660
2+
3+
[문제 링크](https://www.acmicpc.net/problem/11660)
4+
5+
### 성능 요약
6+
7+
메모리: 129504 KB, 시간: 288 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍, 누적 합
12+
13+
### 제출 일자
14+
15+
2025년 4월 17일 08:55:59
16+
17+
### 문제 설명
18+
19+
<p>N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.</p>
20+
21+
<p>예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.</p>
22+
23+
<table class="table table-bordered" style="line-height:20.8px; width:158px">
24+
<tbody>
25+
<tr>
26+
<td style="text-align:center">1</td>
27+
<td style="text-align:center">2</td>
28+
<td style="text-align:center">3</td>
29+
<td style="text-align:center">4</td>
30+
</tr>
31+
<tr>
32+
<td style="text-align:center">2</td>
33+
<td style="text-align:center">3</td>
34+
<td style="text-align:center">4</td>
35+
<td style="text-align:center">5</td>
36+
</tr>
37+
<tr>
38+
<td style="text-align:center">3</td>
39+
<td style="text-align:center">4</td>
40+
<td style="text-align:center">5</td>
41+
<td style="text-align:center">6</td>
42+
</tr>
43+
<tr>
44+
<td style="text-align:center">4</td>
45+
<td style="text-align:center">5</td>
46+
<td style="text-align:center">6</td>
47+
<td style="text-align:center">7</td>
48+
</tr>
49+
</tbody>
50+
</table>
51+
52+
<p>여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.</p>
53+
54+
<p>표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오.</p>
55+
56+
### 입력
57+
58+
<p>첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 개의 정수 x1, y1, x2, y2 가 주어지며, (x1, y1)부터 (x2, y2)의 합을 구해 출력해야 한다. 표에 채워져 있는 수는 1,000보다 작거나 같은 자연수이다. (x1 ≤ x2, y1 ≤ y2)</p>
59+
60+
### 출력
61+
62+
<p>총 M줄에 걸쳐 (x1, y1)부터 (x2, y2)까지 합을 구해 출력한다.</p>
63+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sys
2+
input = sys.stdin.readline
3+
4+
N, M = map(int, input().split())
5+
graph = [list(map(int, input().split())) for _ in range(N)]
6+
dp = [[0] * (N+1) for _ in range(N+1)]
7+
8+
for i in range(1, N+1):
9+
for j in range(1, N+1):
10+
dp[i][j] = (dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + graph[i-1][j-1])
11+
12+
13+
for _ in range(M):
14+
x1, y1, x2, y2 = map(int, input().split())
15+
result = (dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1])
16+
print(result)

0 commit comments

Comments
 (0)