[JavaScript][Programmers]ボクサーを並べる
17119 ワード
🔎 ボクサーのソート
リンク
https://programmers.co.kr/learn/courses/30/lessons/85002
📄 コミットコード
福書の対決目録を見て並べ替えた問題です.
ソート条件総勝率の高いボクサーの番号が前にあります.他のボクサーと対決したことのないボクサーの勝率は0%だった. の勝率が同じボクサーの番号の中で、体重が自分より重いボクサーが勝った回数が多いボクサーの番号を前に進みます. 自分より重いボクサーに勝った回数が同じボクサーの番号の中で、重いボクサーの番号が前に進む. 自分の体重が同じ福書番号の中で、小さいサイズが前に進みます. まず、head 2 headの対戦結果をmapに保存して勝率を得る.
あと、mapの字が「N」なら何もせず、「W」なら総数と勝ち回数で+1、
「L」の場合、合計+1のみになります.
次に、パーセンテージを計算し、配列の合計数に挿入してソートします.
この案の構造は「番号、体重、ヘビー級選手に何回勝ったか、勝率」だ.
sortを用いて1回のソートを行い、この場合、ソート条件の順序でbがaより大きい場合は1を返し、aより大きくない場合は−1を返し、aがbより大きい場合は1または−1を返します.
第1例の第3例は失敗したが、NaNは処理できなかった.
そこでパーセンテージを計算し,isNaNで調べ,NaNであれば配列に追加した.
そして採点にtestcase 6,7,8,9が失敗し、質問板で答えを得た.
最初にパーセンテージを計算したときのMathfloorで2番目の位置を見つけて質問板にMathflowerをしないで直接計算して結果はそのままで通過しました
だからパーセンテージ計算は直接win/allで通過しました
リンク
https://programmers.co.kr/learn/courses/30/lessons/85002
📄 コミットコード
function solution(weights, head2head) {
let map = []
for (let i = 0; i < weights.length; i++) {
let tmp = head2head[i];
map.push([]);
for (let j = 0; j < tmp.length; j++) {
map[i].push(tmp[j])
}
}
let total = [];
let heavyWin = new Array(weights.length).fill(0);
for (let i = 0; i < map.length; i++) {
let all = 0;
let win = 0;
for (let j = 0; j < map[i].length; j++) {
switch (map[i][j]) {
case 'N': break;
case 'W':
all++;
win++;
if (weights[i] < weights[j]) heavyWin[i]++;
break;
case 'L': all++; break;
}
}
console.log(`all : ${all}, win:${win}`)
let percent = (win / all);
// console.log(isNaN(percent))
isNaN(percent) ? percent = 0 : percent;
total.push([i,weights[i], heavyWin[i], percent]);
}
console.log(total);
total.sort((a, b) => {
if (b[3] == a[3]) {
if (b[2] == a[2]) {
if (b[1] == a[1]) {
if (a[0] > b[0]) return 1;
else return -1;
} else if (b[1] > a[1]) return 1;
else return -1;
} else if (b[2] > a[2]) return 1;
else return -1;
} else if (b[3] > a[3]) return 1;
else return -1;
})
console.log(total);
var answer = [];
total.forEach(el => {
answer.push(el[0] + 1);
});
return answer;
}
let weights = [60, 70, 60];
let head2head = ["NNN", "NNN", "NNN"];
console.log(solution(weights, head2head));
これは6週目の越境挑戦問題です.福書の対決目録を見て並べ替えた問題です.
ソート条件
あと、mapの字が「N」なら何もせず、「W」なら総数と勝ち回数で+1、
「L」の場合、合計+1のみになります.
次に、パーセンテージを計算し、配列の合計数に挿入してソートします.
この案の構造は「番号、体重、ヘビー級選手に何回勝ったか、勝率」だ.
sortを用いて1回のソートを行い、この場合、ソート条件の順序でbがaより大きい場合は1を返し、aより大きくない場合は−1を返し、aがbより大きい場合は1または−1を返します.
第1例の第3例は失敗したが、NaNは処理できなかった.
そこでパーセンテージを計算し,isNaNで調べ,NaNであれば配列に追加した.
そして採点にtestcase 6,7,8,9が失敗し、質問板で答えを得た.
最初にパーセンテージを計算したときのMathfloorで2番目の位置を見つけて質問板にMathflowerをしないで直接計算して結果はそのままで通過しました
だからパーセンテージ計算は直接win/allで通過しました
Reference
この問題について([JavaScript][Programmers]ボクサーを並べる), 我々は、より多くの情報をここで見つけました https://velog.io/@cjh951114/JavaScriptProgrammers-복서-정렬하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol