[プログラマー]level 3-ランキング(js)
11468 ワード
📌問題と説明
プログラマ-ランキング
📌方法
異なる人のコードを表示することによってヒントが得られ、問題を解決する核心は
n-1명과의 경기의 승패를 알 수 있으면 순위를 매길 수 있다
である.例題から分かるように、2番の選手は
3명(1번, 3번, 4번)한테 패배
で、1명(5번)한테 이겼으므로
n-1位との試合で勝負した.また問題の条件には
A선수가 B선수보다 실력이 좋다면 A선수는 B선수를 항상 이긴다
の条件があり、Aの実力がBより強ければ、Aに勝った人はBにとって必ず勝つ.
たとえば、
2番の選手に勝った[1,3,4]選手は必ず5番の選手に勝つ
逆に5番の選手は[1,3,4]の選手が絶対負けると考えられる.
このように2次元配列では,各選手の勝敗を表で記入し,表各行(各選手)の勝敗回数がn−1であれば,答えを1ずつ上げる.
📌マイコード
function solution(n, results) {
var answer = 0;
var visit = Array.from(Array(n), () => Array(n).fill(0));
// 이겼다면 1을, 졌으면 -1을 채움
for (var r of results) {
visit[r[0]-1][r[1]-1] = 1;
visit[r[1]-1][r[0]-1] = -1;
}
for (let i =0; i< n; i++) {
for (let j = 0; j< n; j++) {
// A가 이긴 사람은 A가 진 사람한테 무조건 진다.
// 2번이 이긴사람(5번)은 2번이 진사람(1번, 3번, 4번)한테 무조건 진다.
if (visit[i][j] === 1) {
let index = [];
visit[i].map((v,idx) => {
if (v === -1) index.push(idx)
})
index.map(v => {
visit[j][v] = -1;
})
}
// A를 이긴 사람은 A한테 진사람한테 무조건 이긴다.
// 2번을 이긴사람(1번, 3번, 4번)은 2번한테 진사람(5번)한타 무조건 이긴다.
else if (visit[i][j] === -1) {
let index = [];
visit[i].map((v,idx) => {
if (v === 1) index.push(idx)
})
index.map(v => {
visit[j][v] = 1;
})
}
}
}
// 각 행을 돌면서 행의 0의 갯수가 1개면 answer를 1씩 올려준다.(혹은 1 || -1 의 갯수가 n-1이면 answer++)
visit.map(v => {
if (v.filter(v => (v === 0)).length === 1) answer++
});
return answer;
/*
테스트케이스 참고 표
[
[ 0, 1, 0, 0, 1 ],
[ -1, 0, -1, -1, 1 ],
[ 0, 1, 0, -1, 1 ],
[ 0, 1, 1, 0, 1 ],
[ -1, -1, -1, -1, 0 ]
]
*/
}
Reference
この問題について([プログラマー]level 3-ランキング(js)), 我々は、より多くの情報をここで見つけました https://velog.io/@swanious/프로그래머스level3-순위jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol