다시 돌아온 분할 문제.
4사분면을 나눠서 진행된다는 것을 파악할 수 있으며,
# include <iostream>
using namespace std;
char arr[65][65];
void quadCheck(int x, int y, int size) {
int one = 1;
int zero = 1;
if (size == 1) {
cout << arr[x][y];
return;
}
for (int i = x; i < x + size; i++) {
for (int j = y; j < y + size; j++) {
if (arr[i][j] == '0') one = 0;
if (arr[i][j] == '1') zero = 0;
}
}
if (one == 1) {
cout << 1;
return;
}
if (zero == 1) {
cout << 0;
return;
}
cout << "(";
quadCheck(x, y, size / 2);
quadCheck(x, y + (size / 2), size / 2);
quadCheck(x + (size / 2), y, size / 2);
quadCheck(x +(size / 2) , y+ (size / 2) ,size/2);
cout << ")";
}
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j <N; j++) {
cin >> arr[i][j];
}
}
quadCheck(0, 0, N);
return 0;
}
전형적인 DPS 느낌이라 크게 어렵지는 않았다.
핵심은 기저사례 ( size = 1 , all 1 , all 0 ) 를 잘 구분하여 return 해주는 것이다.