프로그래머스/Lv1

[프로그래머스/Javascript] Lv.1 최소직사각형

woo.oing 2026. 1. 29. 10:13

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

✓ 문제

 

다양한 명함의 크기를 모두 수납 가능한 지갑의 크기 (가로 X 세로)를 구하라
단, 명함의 가로 세로를 변경해서 수납할 수 있음

 

 

✓ 풀이과정

 

1. 명함들의 가로, 세로 값을 배열(sizes)로 전달받으면 작은 것을 가로(w)로 큰 것을 세로(h)로 정렬

2. 가로에서 가장 큰 값과 세로에서 가장 큰 값을 찾아서 저장(walletSize)하고 가로 x 세로를 계산하여 지갑의 크기 반환

 

1번의 정렬 과정을 거치는 이유는

 

위와 같은 다양한 크기의 사각형이 있을 때 이 모든 사각형을 포함할 수 있는 영역의 크기를 계산하려면 가장 큰 가로와 세로의 값을 구하면 되지만 현재 문제에서는 명함을 돌릴 수 있다는 조건이 포함되어 있기 때문에 가장 효율적으로 크기를 계산하기 위해서 전달받은 [가로, 세로] 중에 [작은 값을 가로, 큰 값을 세로]로 정렬한 후 계산했습니다 (여기서 어떤 값을 가로 또는 세로로 둘지는 상관이 없음)

 

 

 최종코드

function solution(sizes) {
  let walletSize = [0, 0];

  for (const size of sizes) {
    let [w, h] = size.sort((a, b) => a - b);
    if (walletSize[0] < w) walletSize[0] = w;
    if (walletSize[1] < h) walletSize[1] = h;
  }

  return walletSize[0] * walletSize[1];
}