728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/68936
풀이 방법
주어진 2차원 배열(정사각형 모양)을 4등분씩 나눈다음 나누어진 영역의 숫자들이 모두 같은 수라면 그 수로 압축하고,
아니라면 계속 나누고 압축하는 것을 반복해준다.
마지막으로 사각형의 크키가 1이 되면 동작을 멈춘다.
이 문제는 재귀를 통해 풀었다.
계산을 이어가면 갈수록 계산할 대상이 작아지고 각 영역을 나눠 계산하기 때문에 재귀가 맞다고 생각했다.
쿼드압축에 관한 글
코드
const solution = (arr) => {
let answer = [0, 0];
const check = (array, n) => {
if(n === 1) {
answer[array[0][0]] += 1;
return;
}
let sum = array.reduce((acc, cur) => acc + cur.reduce((a, c) => a + c, 0), 0);
if(sum === 0 || sum === n * n) {
answer[array[0][0]] += 1;
return;
}
else {
check(array.slice(0, n/2).map((e) => e.slice(0, n/2)), n/2);
check(array.slice(0, n/2).map((e) => e.slice(n/2)), n/2);
check(array.slice(n/2).map((e) => e.slice(0, n/2)), n/2);
check(array.slice(n/2).map((e) => e.slice(n/2)), n/2);
}
}
check(arr, arr.length);
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
2Level / 2021 KAKAO BLIND RECRUITMENT / 메뉴 리뉴얼 (1) | 2023.10.09 |
---|---|
2Level / 2022 KAKAO TECH INTERNSHIP / 두 큐 합 같게 만들기 (1) | 2023.10.07 |
2Level / 연습 문제 / 연속된 부분 수열의 합 (0) | 2023.10.03 |
2Level / 연습 문제 / 택배상자 (0) | 2023.09.25 |
2Level / 연습 문제 / 2개 이하로 다른 비트 (0) | 2023.09.22 |