문제를 보고 든 생각은 사각형을 사분면으로 생각해서 풀어야겠다고 생각했다.
사분면을 검사할때 사분면의 원소가 사분면의 제일 왼쪽 위에 있는 원소와 다르다면 ,
사분면을 잘라서 다시 검사하게 만들었다.
bool check 를 쓴 이유는 사분면 검사를 통과했는지 유무를 검사하기 위해 사용하였다.
#include<iostream>
using namespace std;
int arr[128][128];
int blue = 0;
int white = 0;
void cut(int n1, int n2,int N) {
bool check = true;
int index = arr[n1][n2];
for (int i = n1; i <n1 + N; i++) {
for (int j = n2; j < n2 + N; j++) {
if ((arr[i][j] == 0&&index==1) || (arr[i][j]==1&&index==0)) {
check = false;
cut(n1, n2, N / 2);
cut(n1 + N / 2, n2, N / 2);
cut(n1, n2 + N / 2, N / 2);
cut(n1 + N / 2, n2 + N / 2, N / 2);
return;
}
}
}
if (check&&index == 1)
blue++;
else if(check&&index==0)
white++;
}
int main() {
int num;
cin >> num;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
cin>>arr[i][j];
}
}
cut(0, 0, num);
cout << white << endl;
cout << blue << endl;
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 20544 문제풀이 (0) | 2021.02.21 |
---|---|
[C++] 백준 7576번 문제풀이 (0) | 2021.02.19 |
[C++] 백준 2606 문제풀이 (0) | 2021.02.16 |
[C++] 백준 1931 문제풀이 (0) | 2021.02.16 |
[C++] 백준 1927번 문제풀이 (0) | 2021.02.15 |