[프로그래머스]level3- 순위(js)
📌문제와 설명
📌접근 방식
다양한 사람들의 코드를 보면서 힌트를 얻었는데, 문제를 풀기위한 핵심은 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이면 answer을 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 ]
]
*/
}
Author And Source
이 문제에 관하여([프로그래머스]level3- 순위(js)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@swanious/프로그래머스level3-순위js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)