๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป๐ปํ์ด ๊ณผ์
๋งจ ์ฒ์์๋ \( N \times N \) ํฌ๊ธฐ์ ์์ข ์ด๋ถํฐ ์์ํ์ฌ ์ฃผ์ด์ง ์ ์ฌ๊ฐํ ๋ด์ ์๊น๋ค์ด ๋ชจ๋ ๊ฐ์ ์๊น์ธ์ง๋ฅผ ๋ณผ ๊ฒ๋๋ค. ์ด ๋, ์ ํ์ง๋ ๋ ๊ฐ์ง๋ก ๋๋๊ฒ ๋ฉ๋๋ค.
- ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์๊น์ด ๋ชจ๋ ๊ฐ์๊ฐ? \( \rightarrow \) ํด๋น ์๊น ๊ฐ์ +1ํ๊ณ , ์ข ๋ฃ
- ์๊น์ด ๊ฐ์ง ์์๊ฐ? \( \rightarrow \) ์ฃผ์ด์ง ๋ฒ์์ ์ฌ๊ฐํ์ 4๋ฑ๋ถํ์ฌ ๋ค์ ํ์ ์์
์ ์ฌ๊ฐํ ํ์์ ๋งจ ์ผ์ชฝ ์๋ถํฐ ์ด ๋ฐฉํฅ์ผ๋ก ์์ํ ๊ฒ์ด๋ฉฐ, ์ด ์์ ์ง์ ์ ํ, ์ด์ (rowBegin, colBegin)์ด๋ผ๊ณ ํฉ์๋ค.
ํด๋น ์ ์ฌ๊ฐํ ๋ด์ ์๊น์ด ๋ชจ๋ ๊ฐ์ 1๋ฒ ์ผ์ด์ค์ ๊ฒฝ์ฐ์๋ ํด๋น ์๊น ๊ฐ์๋ฅผ +1 ํด์ฃผ๊ณ ๋๋ด๋ฉด ๋ฉ๋๋ค.
ํ์ง๋ง, 2๋ฒ ์ผ์ด์ค์ ํด๋นํ๋ ๊ฒฝ์ฐ์๋ N์ ๋ฐ์ผ๋ก ๋๋ ํ์ ๋ค์ ํ์์ ์์ํด์ผ ํฉ๋๋ค.
N์ ๋ฐ์ผ๋ก ๋๋ ๋ค์ ํ์์์์ I, II, III, IV์ rowBegin, colBegin ๊ฐ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(rowBegin, colBegin) // I
(rowBegin, colBegin + (N / 2)) // II
(rowBegin + (N / 2), colBegin) // III
(rowBegin + (N / 2), colBegin + (N / 2)) // IV
์์ ํ, ์ด์ ์์์ ์ผ๋ก ํ์ฌ ๊ฐ๊ฐ์ ์์ญ์์ ํ์์ ์์ํ๋ฉด ๋ฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
using Square = vector<vector<int>>;
using Line = vector<int>;
void Search(const Square& coloredPaper, vector<int>& counts, int N, int rowBegin, int colBegin)
{
if (N == 1)
{
int color = coloredPaper[rowBegin][colBegin];
counts[color]++;
return;
}
int color = -1;
bool isAllEqaul = true;
for(int row = rowBegin; row < rowBegin + N; row++)
{
for (int col = colBegin; col < colBegin + N; col++)
{
// ์ฒซ ๋ถ๋ถ ์๊น ์ป๊ธฐ
if (row == rowBegin && col == colBegin)
{
color = coloredPaper[row][col];
continue;
}
// ์์ญ ๋ด์ ์๊น์ด ๋ค๋ฅธ ๊ฒ ์์ ๊ฒฝ์ฐ, ๋ฐ๋ณต๋ฌธ ์ข
๋ฃ
if (color != coloredPaper[row][col])
{
isAllEqaul = false;
break;
}
}
if (!isAllEqaul)
break;
}
// ์์ญ ๋ด์ ์๊น์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ, ํด๋น ์๊น ๊ฐ์ +1
if (color != -1 && isAllEqaul)
{
counts[color]++;
return;
}
int next = N / 2;
Search(coloredPaper, counts, next, rowBegin, colBegin); // I
Search(coloredPaper, counts, next, rowBegin, colBegin + next); // II
Search(coloredPaper, counts, next, rowBegin + next, colBegin); // III
Search(coloredPaper, counts, next, rowBegin + next, colBegin + next); // IV
}
int main()
{
FAST_IO;
int N;
cin >> N;
Square coloredPaper(N, Line(N));
for (int i = 0; i < N; i++)
for (int k = 0; k < N; k++)
cin >> coloredPaper[i][k];
vector<int> counts { 0, 0 };
Search(coloredPaper, counts, N, 0, 0);
for (const auto& color : counts)
cout << color << "\n";
return 0;
}
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 1780๋ฒ | ์ข ์ด์ ๊ฐ์ (C++) (0) | 2023.08.31 |
---|---|
[BOJ] 1992๋ฒ | ์ฟผ๋ํธ๋ฆฌ (C++) (0) | 2023.08.31 |
[BOJ] 11053๋ฒ | ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (C++) (0) | 2023.08.29 |
[BOJ] 25682๋ฒ | ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ 2 (C++) (0) | 2023.08.29 |
[BOJ] 11660๋ฒ | ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (C++) (0) | 2023.08.29 |