[プログラマ][レベル.2]エンコードテスト-最高値の作成(Javascript)


質問する




ソース:https://programmers.co.kr/learn/courses/30/lessons/12941


説明する

function solution(A, B) {
  let answer = 0;
  let minNum, minIndex, maxNum, maxIndex;

  for (let i = A.length; i > 0; i--) {
    A.map((num, index) => {
      if (index === 0) {
        minNum = num;
        minIndex = index;
      }
      if (num < minNum) {
        minNum = num;
        minIndex = index;
      }
    });

    B.map((num, index) => {
      if (index === 0) {
        maxNum = num;
        maxIndex = index;
      }
      if (num > maxNum) {
        maxNum = num;
        maxIndex = index;
      }
    });

    answer += minNum * maxNum;
    A.splice(minIndex, 1);
    B.splice(maxIndex, 1);
  }
  return answer;
}
  • コードを作成したとき、私はあまりにも効率的ではないと思いましたが、案の定、正確性テストに合格しましたが、効率テストでは1つも合格しませんでした.
  • 他人の解答

    function solution(A,B){
      let answer = 0;
    
      A.sort((a,b)=> a-b);
      B.sort((a,b)=> b-a);
    
    
    for(let i=0; i<A.length; i++){
      answer = answer + A[i]*B[i];
    }
      
        return answer;
    }
  • 他の人の解答を見て、「どうしてこんなに簡単に解決できる問題をこんなに複雑に考えているのか」と思いました.Aの連続した最高値とBの連続した最安値を乗せれば良いのですが、それぞれの最高値と最安値を配列から外すべきだと思っていたので、近づいたのは失敗でした.これはsort法で簡単に解決できる問題である.後で頭の中の最初の考えに従って直接コードを書かないで、いろいろな方法を考えて、その中の最も良い方法を選んで解決します.