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

부기·2022년 1월 31일

문제설명

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • sizes의 길이는 1 이상 10,000 이하입니다.
  • sizes의 원소는 [w, h] 형식입니다.
  • w는 명함의 가로 길이를 나타냅니다.
  • h는 명함의 세로 길이를 나타냅니다.
  • w와 h는 1 이상 1,000 이하인 자연수입니다.

내 코드

function solution(sizes) {
  let answer = 0;
  let width = [];
  let height = [];
  for (let i = 0; i < sizes.length; i++) {
    if (sizes[i][0] < sizes[i][1]) {
      width.push(sizes[i][1]);
      height.push(sizes[i][0]);
    } else {
      width.push(sizes[i][0]);
      height.push(sizes[i][1]);
    }
  }
  let maxWidth = Math.max(...width);
  let maxHeight = Math.max(...height);
  answer = maxWidth * maxHeight;
  return answer;
}

풀이 과정

  1. 주어진 배열이 가로와 세로가 주어진 이차원배열이므로 가로값만 넣은 배열과 세로값만 넣은 배열을 만들어주려고 했다.
  2. sizes.lengh만큼 배열을 돌면서 width배열과 height배열에 값을 채워주었다. 이때, 명함의 길이가 가로보다 세로가 더 긴 경우에는 명함을 눕혀서 보관하는 것이 가능하기 때문에 이 경우에는 width배열과 height배열에 값을 거꾸로 넣어주었다.
  3. 이 경우가 아닌 경우에는 원래대로 가로 배열에는 가로값, 세로 배열에는 세로값을 넣어주었다.
  4. 완성 된 배열에서 가장 큰 수를 Math.max()를 통해 maxWidth와 maxHeight에 할당해 주었다.
  5. 정답은 명함이 전부 수용하능한 가로값 * 세로값이므로 answer에 그 값을 할당해 주면 끝!
profile
무럭무럭 자라는 중 ∙∙∙🌱🐣

0개의 댓글