推薦職業群


🔎 推薦職業群


リンク


https://programmers.co.kr/learn/courses/30/lessons/84325

📄 コミットコード

function solution(table, languages, preference) {
  let job = {};

  for (let i = 0; i < table.length; i++) {
    let tmp = table[i].split(' ');
    let sum = 0;
    console.log(`tmp : ${tmp}`);
    for (let j = 0; j < preference.length; j++) {
      for (let k = 0; k < tmp.length; k++) {
        if ( languages[j] == tmp[k]) {
          console.log(languages[j], preference[j])
          sum += (6 - k) * preference[j];
          break;
        }
      }
    }
    job[tmp[0]] = sum;
  }

  let sortedJob=
  Object.keys(job).sort().reduce(
    (newObj,key) => {
      newObj[key] = job[key];
      return newObj;
    },
    {}
  );
  console.log(sortedJob);
  let max = Math.max(...Object.values(sortedJob));
  let answer = Object.keys(sortedJob).find(key => sortedJob[key] === max);
  return answer;
}
let table = ["SI JAVA JAVASCRIPT SQL PYTHON C#", "CONTENTS JAVASCRIPT JAVA PYTHON SQL C++", "HARDWARE C C++ PYTHON JAVA JAVASCRIPT", "PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP", "GAME C++ C# JAVASCRIPT C JAVA"];
let languages = ["JAVA", "JAVASCRIPT"];
let preference =  [7, 5];
console.log(solution(table, languages, preference));
3週間も車を運転できず、4週間目に着いた.4週目の問題は、点数が最も高い職業群を選ぶことです.
実装に比べて、オブジェクトのソートと最大値の検索に時間がかかります.
最初に実現したときは,単純に最大値を求めたが,2番目のテストケースでは誤った答えが現れた.何か悪いところがあるのかと思っていましたがSIとPORTALは同点なので前のSIが答えです.
したがって,作業対象をあらかじめ並べ替える必要がある.
Object.keys(オブジェクト)を使用してkeyのみの配列を取得し、sort()にソートします.
次に、reduceを使用してjob[key]を新しいオブジェクトに挿入し、新しいnewObjectを作成して返します.
その後、sortedJob値の配列のみを収集して最大値を検索し、sortedJobは最大値を持つキーを検索します.

🎲 その他のコード


なんといっても3番ゲートを回るので、他の方法が気になります.
他の人の解答の中でyourimのコードはとても簡潔に見えます
function solution(table, languages, preference) {
  const scores = table.map(job => {
    const scoreTable = job.split(' ').reverse();

    const score = languages.reduce(
      (acc, language, i) => acc + (scoreTable.indexOf(language) + 1) * preference[i],
      0
    );

    return { name: scoreTable[5], score };
  });

  return scores.sort((job1, job2) => {
    if (job1.score > job2.score) return -1;
    if (job1.score < job2.score) return 1;
    if (job1.name < job2.name) return -1;
    return 0;
  })[0].name;
}

📘 リファレンス


https://velog.io/@try catch/JS-value-key値-検索
https://velog.io/@sa 02045/JS-object-Keyでソート