프로그래머스 LEVEL 3(순위)
-
사용 언어 : javascript
-
해결 날짜 : 2022-12-27
-
해결 방법 :
- graph 초기화
- results를 돌며 graph에 승, 패 update
- 이 때 승리한 경우는 양수, 패배한 경우는 음수로 update
- 1부터 n까지 돌며
- graph[i]에서 0보다 작은 경우(i를 이긴 선수들) winI와, 0보다 큰 경우(i한테 진 선수들) loseI를 filter
- i를 이긴 선수는 i를 진 선수를 무조건 이기고, i한테 진 선수는 i가 이긴 선수한테 무조건 지므로 이 로직을 update
- 각 i 별 이기고 진 선수의 수가 n - 1인 경우(본인 제외 나머지가 다 0이 아닌 경우) answer 증가
-
회고 :
- x
-
코드
function solution(n, results) { let answer = 0; const graph = Array.from({ length: n + 1 }, () => Array(n + 1).fill(0)); for (const [w, l] of results) { graph[w][l] = l; graph[l][w] = -w; } for (let i = 1; i <= n; i++) { const winI = graph[i].filter((node) => node < 0); const loseI = graph[i].filter((node) => node > 0); for (const w of winI) { for (const l of loseI) { graph[-w][l] = l; } } for (const l of loseI) { for (const w of winI) { graph[l][-w] = w; } } } for (let i = 1; i <= n; i++) { if (graph[i].filter((node) => node !== 0).length === n - 1) answer += 1; } return answer; }
-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges