본문 바로가기

알고리즘/프로그래머스

프로그래머스 - 순위, 파이썬

문제


프로그래머스 링크

풀이


  • 그래프 문제에 속해있지만 해쉬로 풀 수 있는 문제
  • 파이썬 내장모듈인 Collections 의 defaultdict 클래스를 활용하였다.
  • 굳이 활용하지 않아도 되지만 파이썬의 딕셔너리의 경우 키 값이 없으면 에러가 나서 귀찮기 때문이다.
  • defaultdict 클래스를 활용하면 defaultdict(set)의 경우 모든 키에 대해서 값이 없는 경우 자동으로 인자로 넘어온 함수를 호출하여 그 결과값으로 설정해준다.
  • 순위를 정하는 문제이기 때문에 a에게 진 선수들, a를 이긴 선수들을 각각 딕셔너리로 저장해준다.(중복을 피하기 위해 set 자료형 활용
  • 선수 수만큼 반복문을 돌면서 a에게 진 선수들은 a를 이긴 선수들에게도 모두 지고, a를 이긴 선수들은 a가 이긴 선수들을 모두 이긴다는 논리로 딕셔너리를 업데이트 해준다.
  • 두 개 딕녀너리의 원소의 수가 선수 숫자 - 1이 되면 순서가 결정되므로 그 값을 리턴해준다.

요구능력


  • 레벨 3
  • 해쉬, 딕셔너리, set 자료형

코드


from collections import defaultdict

def solution(n, results):
    win = defaultdict(set)
    lose = defaultdict(set)
    for result in results :
        winner, loser  = result[0] , result[1]
        win[winner].add(loser)
        lose[loser].add(winner)
    for i in range(1, n+1) :
        for l in win[i] :
            lose[l].update(lose[i])
        for w in lose[i] :
            win[w].update(win[i])
    cnt = 0
    for i in range(1, n+1) :
        if len(win[i]) + len(lose[i]) == n - 1 :
            cnt += 1
    return cnt