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;
}
Author And Source
이 문제에 관하여(Level1 - 최소직사각형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@crazydj/프로그래머스-문제-풀이-Level1-최소직사각형저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)