圧縮後数世紀
アルゴリズムの資料は私も自分で解答したことがありますが、他の人との解答の比較を通じて、私が整理したこれらの資料はもっと良いアルゴリズムを学ぶためです.
プログラマー-四圧縮後の数世紀
https://programmers.co.kr/learn/courses/30/lessons/68936
解答:x、yを基準に領域を4等分し、その領域のすべての数字が等しいかどうかをチェックします.(divideメソッド)
数は1でo(1)、数は0でz(0)++を表す.
class Solution {
static int z, o;
static int [][] array;
public int[] solution(int[][] arr) {
array = arr;
divide(0, arr.length, 0, arr.length);
return new int [] {z, o};
}
private static void divide(int a, int b, int c, int d) {
int cnt = 0;
for (int i = a; i < b; i++) {
for (int j = c; j < d; j++) {
if(array[j][i] == 1) cnt++;
}
}
if((b - a) * (d - c) == cnt) o++;
else if(cnt == 0) z++;
else {
int b2 = (a + b) / 2;
int d2 = (c + d) / 2;
divide(a, b2, c, d2);
divide(a, b2, d2, d);
divide(b2, b, c, d2);
divide(b2, b, d2, d);
}
}
}
Reference
この問題について(圧縮後数世紀), 我々は、より多くの情報をここで見つけました https://velog.io/@jkh2801/프로그래머스-쿼드압축-후-개수-세기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol