2023. 8. 31. 20:31γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
π§π»π»νμ΄ κ³Όμ
맨 μ²μμλ \( 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;
}
'Coding Test > 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 |