쿼드트리 문제인데 4(2x2)개로 분할하는게 아닌, 9(3x3)개로 분할하는 문제입니다.
#include<iostream>
#include<cmath>
using namespace std;
const int MAX = 2187;
int n;
int paper[MAX][MAX];
int cnt[3];
void dv(int x, int y, int len)
{
if (len == 0) return;
int value[3] = { 0, };
for (int i = y; i < y + len; i++) {
for (int j = x; j < x + len; j++) {
if (paper[i][j] == -1) value[0]++;
else if (paper[i][j] == 0) value[1]++;
else value[2]++;
}
}
for (int i = 0; i < 3; i++) {
if (value[i] == len * len) {
cnt[i]++;
return;
}
}
int next = len / 3;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
dv(x + next * i, y + next * j, next);
}
}
return;
}
int main(void)
{
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j ++) {
cin >> paper[i][j];
}
}
dv(0, 0, n);
for (int i = 0; i < 3; i++) {
cout << cnt[i] << endl;
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 11051번: 이항 계수 2 (0) | 2021.03.26 |
---|---|
[백준/C,C++] 1629번: 곱셈 (0) | 2021.03.25 |
[백준/C,C++] 1992번: 쿼드트리 (0) | 2021.03.17 |
[백준/C,C++] 2630번: 색종이 만들기 (0) | 2021.03.17 |
[백준/C,C++] 5430번: AC (0) | 2021.03.16 |
댓글