728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
- ์ด๊ธฐ๊ฐ์ผ๋ก, 1ํ๊ณผ 1์ด ๊ฐ๊ฐ์ ๋ฐฐ์ด ์์์ ๋์ ํฉ์ ์ ์ฅํฉ๋๋ค.
- 2ํ 2์ด ~ Nํ N์ด๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- \( N \times N \) ๋ฐฐ์ด์ arr์ด๋ผ๊ณ ํ๋ค๋ฉด,
- arr[row][col] += arr[row - 1][col] + arr[row][col - 1] - arr[row - 1][col - 1]
- arr[row - 1][col]์๋ (row - 1 ) * col ์ฌ๊ฐํ ํฌ๊ธฐ๋งํผ์ ๋์ ํฉ์ด ์ ์ฅ๋์ด ์์ต๋๋ค.
- arr[row][col - 1]์๋ row * (col - 1) ์ฌ๊ฐํ ํฌ๊ธฐ๋งํผ์ ๋์ ํฉ์ด ์ ์ฅ๋์ด ์์ต๋๋ค.
- ์ฆ, arr[row - 1][col] + arr[row][col - 1]์ ํ๊ฒ ๋๋ฉด, arr[row - 1][col - 1]๋ถ๋ถ์ด ๊ฒน์น๊ฒ ๋ฉ๋๋ค.
- ๋ฐ๋ผ์, arr[row - 1][col - 1]์ ๋นผ์ค์ผ row * col ์ฌ๊ฐํ์ ๋์ ํฉ์ด ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋ฆผ์ผ๋ก ํํํ์ฌ ๋ณด๋ ๊ฒ์ด ๋ ์ดํด๊ฐ ๋น ๋ฅผ ๊ฒ๋๋ค.
3. (x1, y1)๋ถํฐ (x2, y2)๊น์ง์ ์ฌ๊ฐํ ํฌ๊ธฐ ํฉ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์์ต๋๋ค.
- (x1, y1)๋ถํฐ (x2, y2)์ ํฉ๊ณ = arr[x2][y2] - arr[x2][y1 - 1] - arr[x1 - 1][y2] + arr[x1 - 1][y1 - 1]
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#define FAST_IO cout.tie(NULL); cin.tie(NULL); ios::sync_with_stdio(false);
using namespace std;
int main()
{
FAST_IO;
int N, M;
cin >> N >> M;
vector<vector<int>> field(N + 1, vector<int>(N + 1));
for (int row = 1; row <= N; row++)
{
for (int col = 1; col <= N; col++)
{
// 1. 0ํ 0์ด ๊ฐ์ ๊ทธ๋ฅ ์ ์ฅํ๊ธฐ
if (row == 1 and col == 1)
{
cin >> field[row][col];
continue;
}
int data;
cin >> data;
// 2. 0๋ฒ์งธ ํ์ col - 1๋ฒ์งธ ๊ฐ์๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ํด ๋์ ํ์ฌ ์ ์ฅํ๊ธฐ
if (row == 1 and col > 1)
{
field[row][col] = field[row][col - 1] + data;
continue;
}
// 3. 0๋ฒ์งธ ์ด์ row - 1๋ฒ์งธ ๊ฐ์๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ํด ๋์ ํ์ฌ ์ ์ฅํ๊ธฐ
if (col == 1 and row > 1)
{
field[row][col] = field[row - 1][col] + data;
continue;
}
// 4. field[row][col] = [row - 1][col] + [row][col - 1] - [row - 1][col - 1] + data
field[row][col] = field[row - 1][col] + field[row][col - 1] - field[row - 1][col - 1] + data;
}
}
for (int i = 0; i < M; i++)
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
// [x2, y2] ๋ฉด์ - ([x1 - 1, y2] ๊น์ง์ ๋ฉด์ ) - ([x2, y1 - 1] ๊น์ง์ ์ด ๋ฉด์ ) + (์์์ ๋ ๋ฒ ๋นผ์ ๊ฒน์น๋ ๋ถ๋ถ)
int answer = field[x2][y2] - field[x1 - 1][y2] - field[x2][y1 - 1] + field[x1 - 1][y1 - 1];
cout << answer << "\n";
}
return 0;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 11053๋ฒ | ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (C++) (0) | 2023.08.29 |
---|---|
[BOJ] 25682๋ฒ | ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ 2 (C++) (0) | 2023.08.29 |
[BOJ] 2559๋ฒ | ์์ด (C++) (0) | 2023.08.27 |
[BOJ] 16139๋ฒ | ์ธ๊ฐ-์ปดํจํฐ ์ํธ์์ฉ (C++) (1) | 2023.08.27 |
[BOJ] 11659๋ฒ | ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4 (C++) (0) | 2023.08.27 |