1. 문제 설명


2. 제한사항


3. 입출력 예제

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]	

4. 입출력 예 설명

스크린샷 2021-08-27 오전 1.29.24.png


5. 문제 풀이

(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];
};

6. 문제 풀이 해설