- 난이도: Lv2
프로그래머스 링크: https://school.programmers.co.kr/learn/courses/30/lessons/68936
풀이 링크(GitHub): hayannn/CodingTest_Java/프로그래머스/2/쿼드압축 후 개수 세기
풀이 시간 : 27분
class Solution {
public int[] solution(int[][] arr) {
int[] answer = new int[2];
compress(arr, 0, 0, arr.length, answer);
return answer;
}
private void compress(int[][] arr, int x, int y, int size, int[] answer) {
if (isUniform(arr, x, y, size)) {
answer[arr[x][y]]++;
return;
}
int half = size / 2;
int[][] offsets = {{0, 0}, {0, half}, {half, 0}, {half, half}};
for (int[] offset : offsets) {
compress(arr, x + offset[0], y + offset[1], half, answer);
}
}
public boolean isUniform(int[][] arr, int x, int y, int size) {
int val = arr[x][y];
for (int i = x; i < x + size; i++) {
for (int j = y; j < y + size; j++) {
if (arr[i][j] != val) return false;
}
}
return true;
}
}