[programmers][X] 쿼드압축 후 개수 세기

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

import java.util.*;

class Solution {
    public int[] solution(int[][] arr) {
        int[] answer = new int[2];

        Queue<int[]> q = new ArrayDeque<>();
        q.offer(new int[]{0,0,arr.length,arr[0].length});

        while(!q.isEmpty()){
            int len = q.size();
            for(int i = 0; i < len ; i++){
                int[] temp = q.poll();

                boolean isSame = true;
                int val = arr[temp[0]][temp[1]];
                for(int x = temp[0] ; x < temp[2] ; x++){
                    for(int y = temp[1] ; y < temp[3] ; y++){
                        if(val != arr[x][y]){
                            isSame = false;

                            int startX = temp[0];
                            int startY = temp[1];
                            int lastX = temp[2];
                            int lastY = temp[3];

                            int midX = (startX + lastX) / 2;
                            int midY = (startY + lastY) / 2;

                            q.offer(new int[]{startX, startY, midX, midY});
                            q.offer(new int[]{startX, midY, midX, lastY});
                            q.offer(new int[]{midX, startY, lastX, midY});
                            q.offer(new int[]{midX, midY, lastX, lastY});

                            break;
                        }
                    }
                    if(!isSame) break;
                }
                if(isSame) answer[val]++;
            }
        }

        return answer;
    }
}

© 2023 Lee. All rights reserved.