티스토리 뷰
728x90
문제 링크
programmers.co.kr/learn/courses/30/lessons/68936?language=javascript#
풀이
재귀 함수를 이용하면 됩니다.
1) 배열의 모든 수의 합을 구합니다. 이때 n차원 배열을 풀어주는 flat() 함수를 이용하면 편합니다. flat() 함수는 ES10에서 추가되었습니다.
2) 위에서 구한 합이 0이거나 원소의 개수와 같다면 [1, 0] 또는 [0, 1]을 반환해줍시다.
3) 그렇지 않으면 배열을 4등분하여 다시 함수의 인자로 넘겨줍니다.
정답 코드
const go = (arr) => {
let l = arr.length;
const sum = arr.flat().reduce((acc, v) => acc + v, 0);
if(sum === 0) return [1, 0];
else if(sum === l*l) return [0, 1];
let ret = [0, 0];
l /= 2;
for(let i = 0; i < 2; i++){
for(let j = 0; j < 2; j++){
const next = arr.slice(i*l, i*l+l).map(row => row.slice(j*l, j*l+l));
const cnt = go(next);
ret[0] += cnt[0];
ret[1] += cnt[1];
}
}
return ret;
};
function solution(arr) {
return go(arr);
}
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 다단계 칫솔 판매 (2021 Dev-Matching) (0) | 2021.05.02 |
---|---|
[프로그래머스] 삼각 달팽이 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 이진 변환 반복하기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 3진법 뒤집기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
[프로그래머스] 두 개 뽑아서 더하기 (월간 코드 챌린지 시즌 1) (0) | 2021.04.15 |
댓글