https://programmers.co.kr/learn/courses/30/lessons/86491
function solution(sizes) {
let w = sizes.map(el => el[0]);
let h = sizes.map(el => el[1]);
const len = sizes.length;
for (let i = 0; i < len; i++) {
if (w[i] < h[i]) {
let tmp = w[i];
w[i] = h[i];
h[i] = tmp;
}
};
const maxW = Math.max(...w);
const maxH = Math.max(...h);
const answer = maxW * maxH;
return answer;
}
// let sizes = [[60, 50], [30, 70], [60, 30], [80, 40]]
let sizes = [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]];
console.log(solution(sizes));
추석 + 이사준비 + 퀘이사사용해보기를 하느라 알고를 되게 오랜만에 푼다.
이번문제는 8주차 위클리
직원들의 명합 [w,h]를 주고 모든 명함을 담을 수 있는 최소 크기의 지갑을 구하는 문제이다.
처음엔 그냥 무지성으로 문제설명대로 최대값을 구하고, 그다음 가장 큰 숫자의 w와 h를 바꿔서 곱한 값을 출력했다.
당연하게도 첫번째 테스트케이스만 통과하고 나머지는 다 틀렸다.
이제 어떻게 찾을까 생각해봤다.
두번째 테스트 케이스로 어떻게 하면 최대가 나올까 고민해보다가 그냥 w가 h보다 작으면 두개를 바꿔서 w의 최대값을 구하고, h의 최대값을 구해 곱하면 답이 나왔다.
function solution(sizes) {
const rotated = sizes.map(([w, h]) => w < h ? [h, w] : [w, h]);
let maxSize = [0, 0];
rotated.forEach(([w, h]) => {
if (w > maxSize[0]) maxSize[0] = w;
if (h > maxSize[1]) maxSize[1] = h;
})
return maxSize[0]*maxSize[1];
}
다른사람의 풀이를 보다가 최종택님의 코드가 되게 깔끔하고, 마음에 들었다.
map을 이용하여 rotated라는 새로운 배열을 만드는데 이때 삼항연산자를 이용해 내가 했던 방법을 한줄로 적용한게 인상적이였다.