programmers_쿼드압축 후 개수 세기_java

2023. 4. 14. 12:07Algorithm/Programmers

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/68936

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    private static int[] result; 
    public int[] solution(int[][] arr) {
        int[] answer = new int[2];
        
        result = new int[2];
        quard(0,0,arr.length-1, arr[0].length-1, arr);
        answer = result;
        return answer;
    }
    
    public void quard(int sy, int sx, int ey, int ex, int[][] arr){
        int boxResult = isOne(sy, sx, ey, ex, arr);
        if(boxResult == 0){ // 해당 영역이 동일한 값으로 채워져있는지 확인
            result[0]++;
            return;
        }else if(boxResult == 1){
            result[1]++;
            return;
        }
        
        int midy = (sy + ey) /2;
        int midx = (sx + ex) /2;
        
        // 좌상
        quard(sy, sx, midy, midx, arr);
        // 우상
        quard(sy, midx +1, midy, ex, arr);
        // 좌하
        quard(midy+1, sx, ey, midx, arr);
        // 우하
        quard(midy+1, midx +1, ey, ex, arr);
    }
    
    public int isOne(int sy, int sx, int ey, int ex, int[][] arr){
        int tmp = arr[sy][sx];
        for(int i = sy; i<=ey; i++){
            for(int j = sx; j<=ex; j++){
                if(tmp != arr[i][j]){
                    return -1;
                }
            }
        }
        return tmp;
    }
    
    public void printArr(int sy, int sx, int ey, int ex, int[][] arr){
        System.out.println("("+sy+","+sx+") "+"("+ey+","+ex+")");
        for(int i = sy; i<=ey; i++){
            for(int j = sx; j<=ex; j++){
                System.out.print(arr[i][j] +" ");
            }
            System.out.println();
        }
        System.out.println();
    }
}