From 8ce3ab7a13c7c993508a0bfe7ce211fdc0c59bf9 Mon Sep 17 00:00:00 2001 From: belowyoon <92996412+belowyoon@users.noreply.github.com> Date: Mon, 6 May 2024 00:57:13 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20I]=20Title:=20=EA=B5=AC=EA=B0=84=20?= =?UTF-8?q?=ED=95=A9=20=EA=B5=AC=ED=95=98=EA=B8=B0=205,=20Time:=20128=20ms?= =?UTF-8?q?,=20Memory:=206260=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 63 +++++++++++++++++++ ...4\355\225\230\352\270\260\342\200\2055.cc" | 45 +++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 "\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/README.md" create mode 100644 "\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055.cc" diff --git "a/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/README.md" "b/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/README.md" new file mode 100644 index 0000000..c5b0a48 --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/README.md" @@ -0,0 +1,63 @@ +# [Silver I] 구간 합 구하기 5 - 11660 + +[문제 링크](https://www.acmicpc.net/problem/11660) + +### 성능 요약 + +메모리: 6260 KB, 시간: 128 ms + +### 분류 + +다이나믹 프로그래밍, 누적 합 + +### 제출 일자 + +2024년 5월 6일 00:56:49 + +### 문제 설명 + +

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

+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1234
2345
3456
4567
+ +

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

+ +

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

+ +### 입력 + +

첫째 줄에 표의 크기 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)

+ +### 출력 + +

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

+ diff --git "a/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055.cc" "b/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055.cc" new file mode 100644 index 0000000..761a81f --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/11660.\342\200\205\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055/\352\265\254\352\260\204\342\200\205\355\225\251\342\200\205\352\265\254\355\225\230\352\270\260\342\200\2055.cc" @@ -0,0 +1,45 @@ +#include +#include +#include + +using namespace std; + +int main() { + ios_base::sync_with_stdio(0); + cin.tie(0); + + int n, m; + cin >> n >> m; + vector> map(n, vector(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; +}