Skip to content

Commit

Permalink
[Silver I] Title: 구간 합 구하기 5, Time: 128 ms, Memory: 6260 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
belowyoon committed May 5, 2024
1 parent 3822485 commit 8ce3ab7
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
63 changes: 63 additions & 0 deletions 백준/Silver/11660. 구간 합 구하기 5/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# [Silver I] 구간 합 구하기 5 - 11660

[문제 링크](https://www.acmicpc.net/problem/11660)

### 성능 요약

메모리: 6260 KB, 시간: 128 ms

### 분류

다이나믹 프로그래밍, 누적 합

### 제출 일자

2024년 5월 6일 00:56:49

### 문제 설명

<p>N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.</p>

<p>예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.</p>

<table class="table table-bordered" style="line-height:20.8px; width:158px">
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">2</td>
<td style="text-align:center">3</td>
<td style="text-align:center">4</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">3</td>
<td style="text-align:center">4</td>
<td style="text-align:center">5</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">4</td>
<td style="text-align:center">5</td>
<td style="text-align:center">6</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">5</td>
<td style="text-align:center">6</td>
<td style="text-align:center">7</td>
</tr>
</tbody>
</table>

<p>여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.</p>

<p>표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오.</p>

### 입력

<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>

### 출력

<p>총 M줄에 걸쳐 (x1, y1)부터 (x2, y2)까지 합을 구해 출력한다.</p>

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);

int n, m;
cin >> n >> m;
vector<vector<int>> map(n, vector<int>(n, 0));

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
}
}

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i-1 >= 0) map[i][j] += map[i-1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j-1 >= 0) map[i][j] += map[i][j-1];
}
}

int x1, y1, x2, y2, num;
for (int i = 0; i < m; i++) {
cin >> x1 >> y1 >> x2 >> y2;
x1--; y1--; x2--; y2--;
num = map[x2][y2];
if (y1-1 >= 0) num -= map[x2][y1-1];
if (x1-1 >= 0) num -= map[x1-1][y2];
if (x1-1 >= 0 && y1-1 >= 0) num += map[x1-1][y1-1];
cout << num << '\n';

}

return 0;
}

0 comments on commit 8ce3ab7

Please sign in to comment.