문제 및 제한 사항
명함 지갑을 만드는 회사가 지갑의 크기를 결정하려고 합니다. 모든 모양과 크기의 명함을 담을 수 있으면서도 작고 휴대하기 편한 지갑을 만들어야 합니다. 이러한 요구 사항을 충족하는 지갑을 만들기 위해 디자인 팀은 모든 명함의 너비와 높이를 조사했습니다.
아래 표는 명함 4장의 너비와 높이를 보여줍니다.
| 명함 숫자 | 너비 길이 | 길이 길이 |
| 1 | 60 | 50 |
| 2 | 30 | 70 |
| 삼 | 60 | 30 |
| 4 | 80 | 40 |
가장 긴 가로 세로 길이가 각각 80, 세로 70이므로 지갑을 80(가로) x 70(세로)으로 하면 모든 명함을 수납할 수 있습니다. 하지만 2번 명함을 가로로 보관하면 80(가로) x 50(세로) 지갑에 모든 명함을 수납할 수 있습니다. 이때 지갑 크기는 4000(=80 x 50)입니다.
모든 명함 너비 길이와 길이 길이 대표 2치수 준비 크기가다 매개변수로 주어진다. 모든 명함 저장하다 숫자 있다 최대 작은 지갑 만들다 당시, 지갑의 크기 반품 그래서 해결책 기능 작성해주세요.
**제한 사항**
크기의 길이는 1보다 크거나 같고 10,000보다 작거나 같습니다.
– 크기의 요소는 (w, h) 형식입니다.
-w는 명함의 가로 길이를 나타냅니다.
-h는 명함의 세로 길이를 나타냅니다.
– 승그리고 시간~이다 1 더 1,000 아래에 는 자연수이다.
해결 방법
명함의 크기는 가로*세로 입니다.
그런데 문제에서 보듯이 명함을 가로로 놓는 경우를 계산해보면 같이 묶어(가로,세로) 있어도 모두 가로가 될 수도 있고 세로가 될 수도 있다.
모든(가로, 세로) 묶음에서 긴 것을 maxWidth라고 하면 answerMax에 넣었습니다.
즉, (60, 50), (30, 70), (60, 30), (80, 40)이 있을 때 () 안의 항목을 비교하여 큰 쪽을 밀어 넣는다.
그러면 answerMax에는 현재 60, 70, 60, 80이 포함됩니다.
반대로 작은 것을 minWidth라고 하면 50, 30, 30, 40이 answerMin에 포함됩니다.
모든 명함을 담을 수 있으려면 큰 것 중에서는 가장 크고 가장 작은 것 중에서는 가장 큰 것이어야 합니다.
따라서 반환할 최종 값은 확장 구문으로 answerMax 및 answerMin의 요소를 하나씩 스캔하고 max를 곱하는 것입니다.
문제를 풀면서 왜 이렇게 해야 하나요? 잘 이해하지 못했는데 문제를 잘 읽고 나니 누군가가 알려준 힌트를 이해하게 되었습니다.
암호
function solution(sizes) {
let answerMax = ();
let answerMin = ();
for (let i = 0; i < sizes.length; i++) {
let maxWidth = Math.max(sizes(i)(0), sizes(i)(1));
answerMax.push(maxWidth);
let minWidth = Math.min(sizes(i)(0), sizes(i)(1));
answerMin.push(minWidth);
}
return Math.max(...answerMax) * Math.max(...answerMin);
}