알고리즘 고득점 Kit - 그래프 - 순위

 

def solution(n, results):
    answer = 0
    graph = [[False] * (n+1) for _ in range(n+1)]
    
    for win, lose in results:
        graph[win][lose] = True
    
    for k in range(1, n+1):
        for i in range(1, n+1):
            for j in range(1, n+1):
                # result로 만들어 놓은 환경에서 확인할 것. 그래서 i, k가 쌍이고 k, j가 쌍임.
                # i가 j를 이겼거나(True) j 가 i를 이겼다면 [i][j]를 True로 바꿈 = 승부가 났음
                if graph[i][k] and graph[k][j]:
                    graph[i][j] = True
    
    for i in range(1, n+1):
        count = 0
        for j in range(1, n+1):
            # 같은 사람이면 걍 넘어감
            if i == j:
                continue
                # 본인 외의 다른 사람과의 결과가 있다면 카운트 올림
            if graph[i][j] or graph[j][i]:
                count += 1
        # 본인을 제외한 모든 사람들의 결과를 알 수 있다면 answer에 +1
        if count == n-1:
            answer += 1
    
    return answer
반응형