推薦職業群
15912 ワード
🔎 推薦職業群
リンク
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でソート
Reference
この問題について(推薦職業群), 我々は、より多くの情報をここで見つけました
https://velog.io/@cjh951114/JavaScriptProgrammers-직업군-추천하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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));
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;
}
Reference
この問題について(推薦職業群), 我々は、より多くの情報をここで見つけました https://velog.io/@cjh951114/JavaScriptProgrammers-직업군-추천하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol