쿼드압축 후 개수 세기

LJM·2023년 8월 25일
0

programmers

목록 보기
80/92

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);
        
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글