Level1 - 최소직사각형

문제 설명 및 링크

https://programmers.co.kr/learn/courses/30/lessons/86491?language=javascript

나의 풀이

명함 array 를 돌면서 현재 box size 와 현재 명함 size, 그리고 현재 명함을 돌린 size 를 비교하면서 box size 업데이트했다.

다른 사람 코드 보니 내가 푼게 틀린 건 아닌데, 더 핵심인 포인트가 있었다.

결국 box 의 최소 넓이를 구하는 건데, 그러기 위해선 box 의 width 와 height 중 큰 부분을 업데이트 하면 된다는 점.

요컨데 만약 현재 box 가 [60, 50] 일때 명함이 [30, 70] 인 경우, 60 -> 70 으로 교체하면 된다. (왜냐면 넓이 -> 곱하기 공식이기 때문에, 큰 숫자를 교체하는 것이 작은 숫자를 교체하는 것보다 무조건 작음)

때문에 크기 비교시 명함의 w, h 크기 비교 & 정렬해서 비교를 수행하면 굳이 나처럼 reverse 에 대한 경우를 구해서 비교하는 작업을 안해도 됨....

코드

모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.

function solution(sizes) {
    let box = {
        w: 0,
        h: 0,
    };
    
    // 넘겨받은 size 를 담을 수 있는 box 리턴
    const getBoxSize = size => {
        const tempBox = {...box};
        
        if (tempBox.w < size[0] && tempBox.h < size[1]) {
            tempBox.w = size[0];
            tempBox.h = size[1];
        } else if (tempBox.w < size[0]) {
            tempBox.w = size[0];
        } else if (tempBox.h < size[1]) {
            tempBox.h = size[1];
        }
        
        return tempBox;
    };
    
    sizes.map(size => {
        // 현재 size, 그리고 width 와 height 를 바꾼 size 
        // 이 두 경우에 대해 각각 담을 수 있는 box size 를 구한 후 비교
        const box_0 = getBoxSize(size);
        const box_1 = getBoxSize(size.reverse());
        
        if (box_0.w * box_0.h < box_1.w * box_1.h) {
            box = box_0;
        } else {
            box = box_1;
        }
    });
    
    return box.w * box.h;
}

좋은 웹페이지 즐겨찾기