알고리즘/프로그래머스문제풀이

[Python/프로그래머스]순위_그래프

개발자 덕구🐾 2022. 6. 19. 23:49
728x90

 

 

 

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

 

코딩테스트 연습 - 순위

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

programmers.co.kr

 

 

 


 

 

 

코드 : 

 

from collections import defaultdict
def solution(n, results):
    answer = 0
    win_graph = defaultdict(set) # 이긴 선수 
    lose_graph = defaultdict(set) # 진 선수
    
    for winner, loser in results :
        win_graph[loser].add(winner)
        lose_graph[winner].add(loser)
        
    for i in range(1,n+1) :
        for winner in win_graph[i] : # i를 이긴 사람들은 
            lose_graph[winner].update(lose_graph[i]) #i에게 진 사람들에게도 이긴다
            
        for loser in lose_graph[i] : # i에게 진 사람들은 
            win_graph[loser].update(win_graph[i]) # # i를 이긴 사람들에게도 진다.
            
    for i in range(1,n+1) :
        if len(win_graph[i]) + len(lose_graph[i]) == n-1 :
            answer+=1 
    return answer

 

 

dict를 value를 기준으로  이름을 지었다.

win_graph는 key에게 이긴 친구들이 value로 있는 dict이다.

lose_grpah는 key에게 진 친구들이 value로 있는 dict이다. 

 

 

 

 

i를 이긴 친구들은 i에게 진 친구들에게도 이기며

 

i에게 진 친구들은 i를 이긴 친구들에게도 진다.

 

 

 

참고 블로그 : 

 

https://velog.io/@narastro/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%9C%EC%9C%84-Python

 

[프로그래머스] 순위 (Python)

n명의 권투선수가 권투 대회에 참여했고 각각 1번부터 n번까지 번호를 받았습니다.권투 경기는 1대1 방식으로 진행이 되고, 만약 A 선수가 B 선수보다 실력이 좋다면 A 선수는 B 선수를 항상 이깁

velog.io

 

복습 : 

✅ 20220621

✅ 20220622

✅ 20220623

✅ 20220624

✅ 20220625

✅ 20220626

반응형