문제 링크입니다: https://www.acmicpc.net/problem/1780
백준 1992번 쿼드트리(http://jaimemin.tistory.com/1072)와 비슷한 문제였습니다.
4분할을 하는 대신 9분할을 하면 되는 문제였습니다.
#include <iostream>
using namespace std;
const int MAX = 2187; //3^7
int N;
int arr[MAX][MAX];
int result[3];
void func(int n, int y, int x)
{
//기저 사례
if (n == 1)
{
result[arr[y][x] + 1]++;
return;
}
bool minus = true, zero = true, plus = true;
for(int i=y; i<y+n; i++)
for(int j=x; j<x+n; j++)
if (arr[i][j] == -1)
{
zero = false;
plus = false;
}
else if (arr[i][j] == 0)
{
minus = false;
plus = false;
}
else
{
minus = false;
zero = false;
}
if (minus)
result[0]++;
else if (zero)
result[1]++;
else if (plus)
result[2]++;
else
{
int div = n / 3;
func(div, y, x);
func(div, y, x + div);
func(div, y, x + 2 * div);
func(div, y + div, x);
func(div, y + div, x + div);
func(div, y + div, x + 2 * div);
func(div, y + 2 * div, x);
func(div, y + 2 * div, x + div);
func(div, y + 2 * div, x + 2 * div);
}
return;
}
int main(void)
{
ios_base::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];
func(N, 0, 0);
for (int i = 0; i < 3; i++)
cout << result[i] << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1213번 팰린드롬 만들기 (0) | 2019.01.18 |
---|---|
백준 10827번 a^b (0) | 2019.01.18 |
백준 11729번 하노이 탑 이동 순서 (0) | 2019.01.18 |
백준 16528번 Highway Decommission (0) | 2019.01.18 |
백준 1992번 쿼드트리 (4) | 2019.01.18 |