Skip to content

Commit 485cdcf

Browse files
committed
[Silver I] Title: 구간 합 구하기 5, Time: 220 ms, Memory: 10188 KB -BaekjoonHub
1 parent b4c8bf9 commit 485cdcf

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-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+
메모리: 10188 KB, 시간: 220 ms
8+
9+
### 분류
10+
11+
다이나믹 프로그래밍, 누적 합
12+
13+
### 제출 일자
14+
15+
2025년 5월 13일 09:54:10
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: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <iostream>
2+
3+
using namespace std;
4+
5+
int main() {
6+
cin.tie(0)->sync_with_stdio(0);
7+
8+
int N, M;
9+
int arr[1030][1030]{};
10+
int DP[1030][1030]{};
11+
12+
cin >> N >> M;
13+
for (int i = 1; i <= N; i++) {
14+
for (int j = 1; j <= N; j++) {
15+
cin >> arr[i][j];
16+
}
17+
}
18+
19+
for (int i = 1; i <= N; i++) {
20+
int sum = 0;
21+
for (int j = 1; j <= N; j++) {
22+
sum += arr[i][j];
23+
DP[i][j] = sum;
24+
}
25+
}
26+
27+
for (int i = 1; i <= M; i++) {
28+
int x1, y1, x2, y2;
29+
cin >> x1 >> y1 >> x2 >> y2;
30+
int ans = 0;
31+
for (int j = 0; j < x2 - x1 + 1; j++) {
32+
ans += DP[x1 + j][y2] - DP[x1 + j][y1 - 1];
33+
}
34+
cout << ans << '\n';
35+
}
36+
37+
return 0;
38+
}

0 commit comments

Comments
 (0)