여러 개의 작은 단위 정사각형(크기 1) 공간들로 이루어진 커다란 정사각형 모양의 공간이 주어져 있고, 각 단위 정사각형 공간들은 하얀색 또는 초록색으로 칠해져 있다.
주어진 정사각형 공간을 일정한 규칙에 따라 나누어 다양한 크기를 갖는 정사각형 모양의 하얀색 또는 초록색의 공간으로 만들려고 한다.
입력으로 주어진 전체 공간의 한변의 길이 N과 전체 공간을 구성하는 각 단위 정사각형 공간의 색상(하얀색 또는 초록색)이 주어질 때 규칙에 따라 나누어진 하얀색 공간과 초록색 공간의 정사각형의 개수를 구하는 프로그램을 작성하시오.
규칙
import java.util.Scanner;
/**
입력
8
1 1 0 0 0 0 1 1
1 1 0 0 0 0 1 1
0 0 0 0 1 1 0 0
0 0 0 0 1 1 0 0
1 0 0 0 1 1 1 1
0 1 0 0 1 1 1 1
0 0 1 1 1 1 1 1
0 0 1 1 1 1 1 1
*/
/**
출력
9
7
*/
public class DivideSpaceTest {
static int N, map[][], white, green;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
map = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
map[i][j] = sc.nextInt();
}
}
cut(0, 0, N);
System.out.println(white);
System.out.println(green);
}
static void cut(int y, int x, int size){
int sum = 0;
for (int i = y, yEnd = y + size; i < yEnd; i++) {
for (int j = x, xEnd = x + size; j < xEnd; j++) {
sum += map[i][j];
}
}
if(sum == 0){
++white;
} else if (sum == size * size) {
++green;
} else {
int half = size/2;
cut(y, x, half);
cut(y, x + half, half);
cut(y + half, x, half);
cut(y + half, x + half, half);
}
}
}