정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • 이코테
  • React
  • 노드
  • 개발지식
  • mysql
  • 쿠버네티스
  • 백준
  • 파이썬
  • javascript
  • NodePort
  • docker
  • Jenkins
  • 우테코
  • image pull
  • 디플로이먼트
  • Kubernetes
  • kubelet
  • flutter
  • 모각코
  • image run
  • 리액트
  • 자바스크립트
  • 프로그래머스
  • replicaset
  • 레플리카셋
  • 공식문서
  • 알고리즘
  • programmers
  • 그리디
  • Deployment

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

[프로그래머스 LV2] 가장 큰 정사각형 찾기 문제 풀이 (Javascript)
알고리즘/프로그래머스 2단계

[프로그래머스 LV2] 가장 큰 정사각형 찾기 문제 풀이 (Javascript)

2021. 7. 26. 16:44
반응형

문제 설명

0과 1로 이루어진 2n x 2n 크기의 2차원 정수 배열 arr이 있습니다. 당신은 이 arr을 쿼드 트리와 같은 방식으로 압축하고자 합니다. 구체적인 방식은 다음과 같습니다.

  1. 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다.
  2. 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다.
  3. 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역(입출력 예를 참고해주시기 바랍니다.)으로 쪼갠 뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도합니다.

arr이 매개변수로 주어집니다. 위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아서 return 하도록 solution 함수를 완성해주세요.


제한사항

  • arr의 행의 개수는 1 이상 1024 이하이며, 2의 거듭 제곱수 형태를 하고 있습니다. 즉, arr의 행의 개수는 1, 2, 4, 8, ..., 1024 중 하나입니다.
    • arr의 각 행의 길이는 arr의 행의 개수와 같습니다. 즉, arr은 정사각형 배열입니다.
    • arr의 각 행에 있는 모든 값은 0 또는 1 입니다.

입출력 예

arr result
[[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]

입출력 예 설명

입출력 예 #1

  • 다음 그림은 주어진 arr을 압축하는 과정을 나타낸 것입니다.
  • 최종 압축 결과에 0이 4개, 1이 9개 있으므로, [4,9]를 return 해야 합니다.

입출력 예 #2

  • 다음 그림은 주어진 arr을 압축하는 과정을 나타낸 것입니다.
  • 최종 압축 결과에 0이 10개, 1이 15개 있으므로, [10,15]를 return 해야 합니다.

정답 풀이

function solution(arr) {
    let answer = [0, 0];
    
    const compress = (arr, n) => {
        const value = arr[0][0];
        // 길이가 1 일 때
        if (n <= 1) {
            answer[value] += 1;
            return;
        } 
    
        const sum = arr.reduce((acc, row) => acc + row.reduce((a, r) => a + r), 0);
        
        if (sum === 0 || sum === n * n) {
            answer[value] += 1;
            return;
        }
        
        const half = n / 2;
        const last = n;

        const one = arr.slice(0, half).map(i => i.slice(0, half));
        const two = arr.slice(0, half).map(i => i.slice(half));
        const three = arr.slice(half).map(i => i.slice(0, half));
        const four = arr.slice(half).map(i => i.slice(half));
        
        compress(one, half);
        compress(two, half);
        compress(three, half);
        compress(four, half);
    }

    compress(arr, arr.length);
    return answer;
}
반응형

'알고리즘 > 프로그래머스 2단계' 카테고리의 다른 글

[프로그래머스 LV2][1차] 캐시 문제 풀이 (Javascript)  (0) 2021.07.27
[프로그래머스 LV2] 이진 변환 반복하기 문제 풀이 (Javascript)  (0) 2021.07.27
[프로그래머스 LV2] 스킬트리 문제 풀이 (Javascript)  (0) 2021.07.26
[프로그래머스 LV2] 방문 길이 문제 풀이 (Javascript)  (0) 2021.07.26
[프로그래머스 LV2] 가장 큰 정사각형 찾기 문제 풀이 (Javascript)  (0) 2021.07.23
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바