(JavaScript) 프로그래머 코딩 테스트 레벨 1: 최소 직사각형

문제 및 제한 사항

명함 지갑을 만드는 회사가 지갑의 크기를 결정하려고 합니다. 모든 모양과 크기의 명함을 담을 수 있으면서도 작고 휴대하기 편한 지갑을 만들어야 합니다. 이러한 요구 사항을 충족하는 지갑을 만들기 위해 디자인 팀은 모든 명함의 너비와 높이를 조사했습니다.

아래 표는 명함 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);
}