코딩테스트
[프로그래머스] level3. 순위 (javascript)
째마리
2021. 12. 7. 01:09
반응형
문제
코딩테스트 연습 - 순위
5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2
programmers.co.kr
나의 풀이
모르겠다.
참조
[프로그래머스/그래프, 플로이드] lv3. 순위 (JavaScript)
정확하게 순위를 매길 수 있는 선수의 의미는 다른 모든 노드와 그래프로 연결되어 있는 경우를 의미한다. 플로이드 와샬을 활용한 풀이가 가장 출제의도에 맞는 풀이인 것 같다.
velog.io
위 블로그와 동일한 코드입니다.
위 블로그를 보면서 따라 만들어 보고, 왜 이런지 고민해보았다.
function solution(n, results) {
var answer = 0;
//배열 선언
let arr = Array.from({length:n} , (_,i)=>Array.from({length:n},(_,j)=> i===j ? 0 : false))
//손실되지 않은 정보 적용, 이기면 1, 지면 -1
results.forEach(([start,end])=>{
arr[start-1][end-1] =1
arr[end-1][start-1] =-1
})
for(let m = 0 ; m < n;m++){
for(let i = 0 ; i < n;i++){
for(let j = 0 ; j < n;j++){
// i가 m을 이기고, m이 j를 이기면 i가 j를 이긴 것으로 간주 할 수 있다.
if(arr[i][m] === 1 && arr[m][j] === 1){
arr[i][j] =1
}
if(arr[i][m] === -1 && arr[m][j] === -1){
arr[i][j] = -1
}
}
}
}
for(let i = 0 ; i < n;i++){
let hasFalse = false;
for(let j = 0 ; j < n;j++){
if(arr[i][j] === false){
hasFalse = true;
break;
}
}
// 모든 알 수 있는 정보는 arr에 들어 있으므로
// false가 배열에 없으면 몇등인지 유추할 수 있는 부분 인 것이다.
answer = !hasFalse ? answer+1 : answer
}
return answer;
}
결국 노드(그래프)는 for문 3개를 돌리는 것을 통해 답을 구하는 것 같다.
저 3번째 for문 안에 내가 원하는 조건을 적고, arr에 적용 되도록 하는 것이 포인트 같다.
for문을 3번 돌리면서 연결 될 수 있는 부분은 다 채워진 것이다.
마지막으로 이를 통해 배열을 원하는 정보로 채운 후 다시 전체 배열을 대상으로 마지막 조건으로 최종 답을 도출하면 되는 것 같다.
반응형