Muscardinus

쿼드압축 후 개수 세기 본문

알고리즘 문제/[프로그래머스] Lv2

쿼드압축 후 개수 세기

Muscardinus 2021. 2. 3. 22:32
728x90

programmers.co.kr/learn/courses/30/lessons/68936?language=javascript

 

코딩테스트 연습 - 쿼드압축 후 개수 세기

[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[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]] [10,15]

programmers.co.kr

const quad = (arr, size, cntArr, start) => {
    const first = arr[start[0]][start[1]]; // 시작점
    if (size === 1) {
        first === 0 ? cntArr[0]++ : cntArr[1]++;
        return;
    }
    let half = Math.floor(size / 2);
    let flag = true;
    for (let i = start[0]; i < start[0] + size; i++) {
        for (let j = start[1]; j < start[1] + size; j++) {
            if (first !== arr[i][j]) {
                flag = false;
                break;
            }
        }
        if (!flag) break;
    }
    
    if (flag) {
        first === 0 ? cntArr[0]++ : cntArr[1]++;
        return;
    }
    quad(arr, half, cntArr, start);
    quad(arr, half, cntArr, [start[0], start[1] + half]);
    quad(arr, half, cntArr, [start[0] + half, start[1]]);
    quad(arr, half, cntArr, [start[0] + half, start[1] + half]);
    return;
}

function solution(arr) {
    let answer = [0, 0];
    const size = arr.length;
    quad(arr, size, answer, [0, 0]);
    return answer;
}
728x90

'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글

[3차] 압축  (0) 2021.02.07
이진 변환 반복하기  (0) 2021.02.06
메뉴 리뉴얼  (0) 2021.02.03
삼각달팽이  (0) 2021.02.01
[프로그래머스] 124 나라의 숫자(Lv2)  (0) 2020.10.14
Comments