컴닥 2020. 9. 30. 18:28
반응형

순위
그래프
986명 완료

플로이드 와샬 알고리듬을 이용하면 되지만.. 
족보 없는 방법(야매)으로도 풀 수 있다.. 

n번 선수,
n번 선수에게 이긴 선수들,
n번 선수에게 진 선수들,
이 셋의
합이 n이 되면 ~!
n번은 순서를 알 수 있는 선수. 

그림을 그려보면 직관적이다. 

다만 어떻게 빠짐없이
이긴 선수와 진 선수를 정리할 수 있을지가 관건..
.....

https://programmers.co.kr/learn/courses/30/lessons/49191

 

코딩테스트 연습 - 순위

5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2

programmers.co.kr

def solution(n, results):
    winner_loser, loser_winner = {i + 1: set() for i in range(n)}, {i + 1: set() for i in range(n)}
    for winner, loser in results:
        winner_loser[winner].add(loser)
        loser_winner[loser].add(winner)
    for i in range(1, n + 1):
        for winner in winner_loser[i]:
            for loser in loser_winner[i]:
                winner_loser[loser].add(winner)
        for loser in loser_winner[i]:
            for winner in winner_loser[i]:
                loser_winner[winner].add(loser)
    return sum([1 for i in range(1, n + 1) if len(winner_loser[i]) + len(loser_winner[i]) == n - 1])
반응형