最小長方形(JavaScript)


問題の説明


名刺入れを作っている会社は財布の大きさを確認したいです.様々な形や大きさの名刺を収納でき、コンパクトで持ち運びに便利な財布を作る必要があります.これらの要件を満たすために、設計チームはすべての名刺の横方向と縦方向の長さを調査した.
次の表に、4種類の名刺の水平と垂直の長さを示します.
名刺番号横長160502307030603048040
最も長い横長と縦長はそれぞれ80と70であるため、80(横)x 70(縦)サイズの財布を作成すると、すべての名刺を収容することができる.ただし、横に2番の名刺を収納する場合は、80(横)x 50(縦)サイズの財布ですべての名刺を収納できます.財布のサイズは4000(=80 x 50)です.
パラメータは、すべての名刺の水平と垂直の長さを表す2 D配列サイズです.すべての名刺を収納できる最小財布を作成する場合は、財布の大きさを返すための解関数を完了します.

せいげんじょうけん


sizesの長さは10000より大きい.
sizesの要素は[w,h]形式です.
w名刺の水平長さを表す.
hは名刺の垂直な長さを表す.
wとhは1以上1000以下の自然数である.

I/O例


sizesresult[[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 answer = 0
  let x = 0
  let w = []
  let h = []
  let max_w = 0
  let max_h = 0
  for (let i = 0; i < sizes.length; i++){
    x = sizes[i].sort((a,b) => a-b)
    w.push(x[0])
    h.push(x[1])   
  }
  max_w = Math.max.apply(null, w)
  max_h = Math.max.apply(null, h)
  answer = max_w*max_h
  return answer;
}
  • sort((a,b) => a-b)名刺の横長と縦長の小さい値を横長に並べ替えます.
  • 横になって名刺を収納できる.

  • 名刺の横書きの中で、一番高い値段はMath.max.apply(null, w)で探しました.

  • 名刺の縦置きで一番高い値段はMath.max.apply(null, h)

  • 2つの値に戻りを乗算します.