https://school.programmers.co.kr/learn/courses/30/lessons/68936
class Solution {
int ocnt = 0;
int zcnt = 0;
public int[] solution(int[][] arr) {
int[] answer = new int[2];
int len = arr.length;
dfs(0, 0, len-1, len-1, arr);
answer[0] = zcnt;
answer[1] = ocnt;
return answer;
}
public void dfs(int sr, int sc, int er, int ec, int[][] arr)
{
if(sr == er )
{
if(1 == arr[sr][sc])
ocnt++;
else
zcnt++;
return;
}
boolean same = true;
int pre = arr[sr][sc];
for(int i = sr; i <= er; ++i)
{
for(int j = sc; j <= ec; ++j)
{
if(pre != arr[i][j])
{
same = false;
break;
}
}
if(same==false)
break;
}
if(same)
{
if(1 == arr[sr][sc])
ocnt++;
else
zcnt++;
return;
}
int mr = sr+(er-sr)/2+1;
int mc = sc+(ec-sc)/2+1;
dfs(sr, sc, mr-1, mc-1, arr);
dfs(sr, mc, mr-1, ec, arr);
dfs(mr, sc, er, mc-1, arr);
dfs(mr, mc, er, ec, arr);
}
}