https://school.programmers.co.kr/learn/courses/30/lessons/86491
아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.
명함 번호 가로 길이 세로 길이
1 60 50
2 30 70
3 60 30
4 80 40
가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.
sizes result
[[60, 50], [30, 70], [60, 30], [80, 40]] 4000
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133
function solution(sizes) {
let garo=[], sero=[];
sizes.forEach(x =>{
garo.push(Math.max(...x))
sero.push(Math.min(...x))
});
return Math.max(...garo) * Math.max(...sero)
}
각 명햠의 가로와 세로 중 더 큰 값을 0번 인덱스에 가게 정렬하고 가로와 세로 중에서 MAX를 구해서 지갑의 크기를 계산함.
function solution(sizes) {
const [hor, ver] = sizes.reduce(([h, v], [a, b]) => [Math.max(h, Math.max(a, b)), Math.max(v, Math.min(a, b))], [0, 0])
return hor * ver;
}
prev: [h, v]
curr: [a, b][0, 0]으로 [h, v]를 초기화 하고 curr의 가로 세로 중에서 큰 것과 작은 것을 정렬 한 후 reduce를 통해 이전의 최대 세로와 최대 가로와 비교해서 최대 세로길이와 가로길이를 찾아냄.