let output = solution([[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]]);
console.log(output); // [4,9]
output = solution([[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]]);
console.log(output); // [10,15]

(1) 풀이 1
function solution(arr) {
const comp = (rowS, rowE, colS, colE, arr) => {
if (rowS === rowE) {
if (arr[rowS][colS]) return [0, 1];
return [1, 0];
};
let rowM = parseInt((rowS + rowE) / 2);
let colM = parseInt((colS + colE) / 2);
const leftU = comp(rowS, rowM, colS, colM, arr);
const rightU = comp(rowS, rowM, colM + 1, colE, arr);
const leftD = comp(rowM + 1, rowE, colS, colM, arr);
const rightD = comp(rowM + 1, rowE, colM + 1, colE, arr);
let zero = leftU[0] + rightU[0] + leftD[0] + rightD[0];
let one = leftU[1] + rightU[1] + leftD[1] + rightD[1];
if (zero === 4 && one === 0) return [1, one];
else if (zero === 0 && one === 4) return [zero, 1];
else return [zero, one];
};
return comp(0, arr.length - 1, 0, arr.length - 1, arr);
};
(2) 풀이 2
function solution(arr) {
let len = arr.length / 2;
if (len < 1) {
if (arr[0][0]) return [0, 1];
return [1, 0];
}
const leftUp = arr.slice(0, len).map(el => el.slice(0, len));
const rightUp = arr.slice(0, len).map(el => el.slice(len));
const leftDown = arr.slice(len).map(el => el.slice(0, len));
const rightDown = arr.slice(len).map(el => el.slice(len));
const leftU = solution(leftUp);
const rightU = solution(rightUp);
const leftD = solution(leftDown);
const rightD = solution(rightDown);
let zero = leftU[0] + rightU[0] + leftD[0] + rightD[0];
let one = leftU[1] + rightU[1] + leftD[1] + rightD[1];
if (zero === 4 && one === 0) return [1, one];
else if (zero === 0 && one === 4) return [zero, 1];
else return [zero, one];
};