#include <iostream>
#include <algorithm>
using namespace std;
int paper[2188][2188];
int n;
int result[3]; //-1, 0, 1
void consoleInput() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &paper[i][j]);
}
}
return;
}
int checkSameNum(int i_begin, int i_end, int j_begin, int j_end) {
int start;
start = paper[i_begin][j_begin];
for (int i = i_begin; i <= i_end; i++) {
for (int j = j_begin; j <= j_end; j++) {
if (paper[i][j] != start) {
return -2;
}
}
}
return start;
}
void solve(int i_begin, int i_end, int j_begin, int j_end) {
int sameNum = checkSameNum(i_begin, i_end, j_begin, j_end);
if (sameNum == -2) {
int length = (i_end - i_begin + 1) / 3;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
solve(i_begin + i * length, i_begin + i * length + length - 1, j_begin + j * length, j_begin + j * length + length - 1);
}
}
}
else {
result[sameNum + 1]++;
}
}
int main() {
consoleInput();
solve(0, n - 1, 0, n - 1);
for (int i = 0; i < 3; i++) cout << result[i] << endl;
return 0;
}
checkSameNum() : 구간 내의 숫자들이 동일한지, 동일하다면 그 숫자가 무엇인지 반환하는 함수
solve()함수를 재귀적으로 풀어서 계산
아이디어도 단순하고 구현도 단순한 문제..
'코딩 > 알고리즘' 카테고리의 다른 글
백준 2740 행렬 곱셈 (0) | 2017.06.05 |
---|---|
백준 6549 히스토그램에서 가장 큰 직사각형 (0) | 2017.06.05 |
백준 11004 K번째 수 (0) | 2017.06.02 |
[C#] 백준 2749 피보나치수 3 (0) | 2017.05.28 |
백준 9252 LCS2 (0) | 2017.05.27 |