본문 바로가기

Coding Test/Programmers

[프로그래머스/파이썬] 순위

728x90

나의 풀이

def solution(n, results):
    graph = [[0] * n for _ in range(n)]
    rank = dict()
    
    for w, l in results:
        graph[w - 1][l - 1] = 1
        graph[l - 1][w - 1] = -1
    
    for i in range(n):
        for j in range(n):
            for k in range(n): 
                if graph[i][j] == graph[j][k] != 0:
                    graph[i][k] = graph[j][k]
                    graph[k][i] = graph[k][j]
                    
    
    for p in range(n):
        if graph[p].count(0) == 1:
            rank[p] = graph[p].count(1) + 1
            
    return len(rank.keys())

 

 

defaultdict와 set을 활용한 풀이

from collections import defaultdict
def solution(n, results):
    answer = 0
    win, lose = defaultdict(set), defaultdict(set)
    for result in results:
            lose[result[1]].add(result[0])
            win[result[0]].add(result[1])

    for i in range(1, n + 1):
        for winner in lose[i]: win[winner].update(win[i])
        for loser in win[i]: lose[loser].update(lose[i])

    for i in range(1, n+1):
        if len(win[i]) + len(lose[i]) == n - 1: answer += 1
    return answer
반응형