๋ค์ด๊ฐ๋ฉฐ
๊ตฌ๊ฐํฉ์ ์ค์์ฑ์ ๋ ์์๋ณด๊ณ ์ ๊ตฌ๊ฐํฉ๊ณผ ๊ด๋ จ๋ ์์ฉ๋ฌธ์ ๋ฅผ ๋ ํ์ด๋ณด๊ณ ์ ํฉ๋๋ค. ์ง๋ ๊ตฌ๊ฐํฉ๋ณด๋ค๋ ์กฐ๊ธ ๋ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ค์ ํ ๋ฒ ๊ตฌ๊ฐํฉ์ ๊ตฌํด๋๋ ๊ฒ์ด ์ผ๋ง๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฎ์ถฐ์ฃผ๋ ์ง ์ฒดํฌํด๋ณด๋ ์๊ฐ์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์
๋ฐฑ์ค 11660: ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ 5(๋งํฌ)
ํ์ด1
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int size, count;
cin >> size >> count;
vector<vector<int>> sumMetrix(size + 1);
for (int i = 1; i <= size; i++)
{
vector<int> numList(size + 1);
for (int j = 1; j <= size; j++)
{
int num;
cin >> num;
numList[j] = numList[j-1] + num;
}
sumMetrix[i] = numList;
}
for (int i = 0; i < count; i++)
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
int sum = 0;
for (int j = x1; j <= x2; j++)
sum += (sumMetrix[j][y2] - sumMetrix[j][y1-1]);
printf("%d\n", sum);
}
}
1์ฐจ์ ํํ์ ๊ฐ๋ก(ํ) ๊ตฌ๊ฐ์ ํฉ์ ๋ชจ๋ ๋จผ์ ๊ตฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ก ์์ญ ๊ตฌ๊ฐ์ ์ฐจ์ด๋งํผ ์ํํ๋ฉด์ ๊ฐ๋ก ์์ญ(1์ฐจ์)์ ๊ตฌ๊ฐํฉ์ ๋ํ๋ ํํ๋ก ์์ฑํ์ต๋๋ค. ์ ๋ต์ ๋ง์์ผ๋ ์๊ฐ์ด 248ms ์ ๋ ๋์์ต๋๋ค. ์๊ฐ์ ๋ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์์ ํ์ด2(๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ)์ผ๋ก ํ๋ฒ ๋ ํ์ด๋ดค์ต๋๋ค.
ํ์ด2
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int size, count;
cin >> size >> count;
vector<vector<int>> A(size + 1);
for (int i = 1; i <= size; i++)
{
vector<int> numList(size + 1);
for (int j = 1; j <= size; j++)
cin >> numList[j];
A[i] = numList;
}
vector<vector<int>> D(size + 1, vector<int>(size + 1));
for (int i = 1; i <= size; i++)
{
for (int j = 1; j <= size; j++)
D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j];
}
for (int i = 0; i < count; i++)
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
printf("%d\n", D[x2][y2] - D[x1-1][y2] - D[x2][y1-1] + D[x1-1][y1-1]);
}
}
์ด ํ์ด์์๋ ์๋ณธ ๋ฐฐ์ด์ ๊ทธ๋๋ก ์ ๋ ฅ๋ฐ์ ์ ์ฅํ๊ณ , 2์ฐจ์์ ๊ตฌ๊ฐํฉ์ ๊ตฌํฉ๋๋ค. ๊ตฌ๊ฐํฉ ๋ฐฐ์ด D์ i, j ๊ฐ์ ๊ตฌํ๋ ๊ณต์์ D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j]; ์ ๋๋ค. ๋๋ฆ์ ๊ณต์๊ฐ์ง๋ง, ์๊ฐํด๋ณด๋ฉด ๋ฐ๋ก ์, ์ผ์ชฝ, ํด๋น ๊ฐ(A[i][j]) ์ ๋ชจ๋ ๋ํ๊ณ ์ค๋ณต์ผ๋ก ๋ํด์ง ์+์ผ์ชฝ ๊ฐ์ ๋นผ์ฃผ๋ ๋ฐฉ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ (x1, y1), (x2, y2) ์์ญ์ ํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ D[x2][y2] - D[x1-1][y2] - D[x2][y1-1] + D[x1-1][y1-1]์ ๋๋ค. ์ด๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก 1,1์์ ํด๋น ๊ตฌ๊ฐ์ ์ ์ธํ ์์ชฝ, ์ผ์ชฝ์ ์ ์ธ(๋นผ๊ธฐ)ํ๊ณ ์ค๋ณต์ผ๋ก ๋นผ์ค ์+์ผ์ชฝ ๊ฐ์ ๋ํด์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด 120ms๋ก ์๊ฐ์ด ์ ๋ฐ์ผ๋ก ์ค์์ต๋๋ค. ์๋ฌด๋๋ ํ์ด1์ ๊ฐ๋ก์์ญ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ ๋ฐ๋ณต๋ฌธ์ด ํ๋ฒ ๋ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ๋ ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒ์ผ๋ก ์๊ฐ๋ฉ๋๋ค. ํ์ด2์ ๋ฐฉ๋ฒ์ด ๋์ฑ ์ ์์ด๋ฉฐ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ ์ถ์ฒํฉ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐ์ ์์ ํ] ์ต์๊ฐ or ์ต๋๊ฐ ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ(feat. deque) (0) | 2025.04.13 |
---|---|
[๊ธฐ๋ณธ] ํฌ ํฌ์ธํฐ (0) | 2025.03.25 |
[๊ธฐ๋ณธ] ์คํ ์๋ฃ๊ตฌ์กฐ ํ์ฉ (0) | 2025.03.10 |
[๊ธฐ๋ณธ] ํฉ๋ฐฐ์ด๊ณผ ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ (0) | 2025.03.08 |
[๊ทธ๋ํ ํ์] ๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) (0) | 2025.02.12 |
๋๊ธ