현재 한 변의 길이가 9 인데 한가지 색깔이 아니다. 한 변 길이가 3이 되도록 9등분 해야 한다.
(0,0)이 왼쪽 위의 좌표라면, 시작점 좌표는 9개가 된다. 길이는 3이다.
(0,0), (0,3), (0,6)
(3, 0), (3,3) (3, 6)
(6, 0), (6,3) (6, 6)
#include <bits/stdc++.h>
using namespace std;
int n;
int arr[3000][3000];
int answer[3];
bool check(int starti, int endj, int size){ // 전부 같은 색깔인지 검사
int color = arr[starti][endj];
for(int i = starti; i < (starti+size); i++){
for(int j = endj; j < (endj+size); j++) {
if (color != arr[i][j]) return false;
}
}
return true;
}
void div_paper(int x, int y, int len){
if(check(x, y, len)){
answer[arr[x][y]]++; return;
}
int div_len = len / 3; // len == 9, div_len == 3
for(int i = 0; i <3; i++){
for(int j = 0; j <3; j++){ // 좌표에 0, 3, 6을 더한 시작점에서 다시 검사한다.
div_paper(x + i*div_len, y + j*div_len, div_len);
}
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
for(int j = 0; j <n; j++){
cin >> arr[i][j]; arr[i][j]++; // 양수로 만들기
}
}
div_paper(0,0,n);
for(auto c : answer) cout << c << '\n';
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
크로아티아 알파벳 백준 2941번 c++ (0) | 2022.02.22 |
---|---|
통계학 백준 2108번 c++ (0) | 2022.02.22 |
하얀 칸 백준 1100번 c++ (0) | 2022.02.21 |
다이얼 백준 5622번 c++ (0) | 2022.02.21 |
네 번째 점 백준 3009번 c++ (0) | 2022.02.21 |