[プログラマ]最小長方形の作成


これはプログラマーの8週目の問題です.

質問する


パラメータは、すべての名刺の水平と垂直の長さを表す2 D配列サイズです.すべての名刺を収納できる最小財布を作成する場合は、財布の大きさを返すための解関数を完了します.

私の答え

function solution(sizes) {
  var answer = 0;
  let arr = [];
  let minW = [];
  let minH = [];

    for(let i = 0; i <sizes.length; i++){
      sizes[i][0]>sizes[i][1] ? arr.push(sizes[i]) : arr.push([sizes[i][1],sizes[i][0]]);
    
    minW.push(arr[i][0]);
    minW.sort(function(a, b) { return b - a; });
    minH.push(arr[i][1]);
    minH.sort(function(a, b) { return b - a; });
  }
    return answer= minW[0]*minH[0];
}
今回も直観的にできました.もっと簡単な方法を探すよりも、理解の問題から解決すべきだと思います.
名刺入れは名刺の縦横方向を変えることが条件です.そこで、各名刺の縦横の中で一番大きいサイズを、もっと小さい値段にしました.
また、セットの横寸法では、最大値xセットの縦寸法で最大値を返します.

他の人の答え


やはり人の解答を見て、学ぶべきことがたくさんあります.中からいくつか抜き出した.

foreachの使用


このコードで多くのことを学びました.
arr.sort()は、円アレイをソートし、その値を返します.詳細については、「MDN」を参照してください.
for文の代わりにforEach文を使用するには、MDNを参照してください.
if(条件)を実行すると、このように使用できます!
そして答えまで削除し、return値に合えばいいので、勉強しましょう.
function solution(sizes) {
    let w = 0;
    let h = 0;
    sizes.forEach(s => {
        const [a, b] = s.sort((a,b) => a-b); //오름차순 정리
        if (a > h) h = a;
        if (b > w) w = b;
    });

    return w * h;
}

mapの使用


これはweforeachとmapを使う部分とあまり差がありません.降順で並べ替えますMathmax()で最大数を引いた.
Math.max()は、入力した値の中で最大の値を返します.詳細については、「MDN」を参照してください.
function solution(sizes) {
     sizes.map((item) => item.sort((a, b) => b - a)) //내림차순으로 원배열 정렬
    let hMax = Math.max(...sizes.map((item)=> item[0])) //Math.max()에 배열을 사용하기 위해서 ...으로 배열을 복사해줌!
    let wMax = Math.max(...sizes.map((item) => item[1]));
    return hMax * wMax;
}

reduceの使用


reduce再指摘
function solution(sizes) {
    const [hor, ver] = sizes.reduce(([h, v], [a, b]) => [Math.max(h, Math.max(a, b)), Math.max(v, Math.min(a, b))], [0, 0])
    return hor * ver;
}