개발/algorithm
[프로그래머스][level3] 순위 -python
zzi_on2
2022. 1. 3. 15:09
문제 링크
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
# value가 set -> 중복 제거
winner_graph= defaultdict(set)
loser_graph=defaultdict(set)
for winner, loser in results:
# 이긴 애들
winner_graph[winner].add(loser)
# 진 애들
loser_graph[loser].add(winner)
for i in range(1,n+1):
# i한테 진 애들
for loser in winner_graph[i]: # i한테 진애들은 i를 이긴 애들한테도 진것
loser_graph[loser].update(loser_graph[i])
# i한테 이긴 애들
for winner in loser_graph[i]:
# i한테 이긴 애들은 i한테 진 애들도 이긴 것
winner_graph[winner].update(winner_graph[i])
# i가 이긴 애들과 진 애들의 수의 합이 n-1이라면 순위 매기기 가능
for i in range(1, n+1):
if len(loser_graph[i]) + len(winner_graph[i]) == n-1:
answer += 1
return answer