Contents
내가 작성한 코드
내가 작성한 코드
class Solution {
public int[] solution(int[][] arr) {
int[] answer = new int[2]; // answer[0] = 0의 개수, answer[1] = 1의 개수
zip(arr, 0, 0, arr.length, answer);
return answer;
}
private void zip(int[][] arr, int row, int col, int size, int[] answer) {
// 현재 영역이 전부 같은 숫자인지 확인
if (isAllSame(arr, row, col, size)) {
answer[arr[row][col]]++; // 0이면 answer[0], 1이면 answer[1] 증가
return;
}
// 4개로 분할하여 재귀 처리
int newSize = size / 2;
zip(arr, row, col, newSize, answer); // 좌상
zip(arr, row, col + newSize, newSize, answer); // 우상
zip(arr, row + newSize, col, newSize, answer); // 좌하
zip(arr, row + newSize, col + newSize, newSize, answer); // 우하
}
// 해당 영역이 모두 같은 값인지 확인하는 함수
private boolean isAllSame(int[][] arr, int row, int col, int size) {
int value = arr[row][col];
for (int i = row; i < row + size; i++) {
for (int j = col; j < col + size; j++) {
if (arr[i][j] != value) return false;
}
}
return true;
}
}
Share article