🧩 문제 : 순위
💪🏻 풀이 과정
💡 문제 포인트
1️⃣ 중복된 값을 허용하지 않기 위해 set을 사용한다.
2️⃣ A 선수가 B 선수를 이기고, B 선수가 C 선수를 이긴다면 -> A 선수는 B, C 선수를 이길 수 있다.
3️⃣ 자신의 순위를 알기 위해선 자신을 제외한 모든 선수와의 경기 기록을 가지고 있어야한다.
💻 코드
👩🏻💻 깨알 파이썬 문법 > [Python] dictionary에 list 추가하기
from collections import defaultdict
def solution(n, results):
win = defaultdict(set) # key: 승자, value: 패자
lose = defaultdict(set) # key: 패자, value: 승자
for winner, loser in results:
win[winner].add(loser)
lose[loser].add(winner)
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])
answer = 0
for i in range(1, n+1):
if len(win[i]) + len(lose[i]) == n-1: # 순위를 알려면 n-1개의 기록을 가지고 있어야함
answer += 1
return answer
💭결과
![](https://blog.kakaocdn.net/dn/RSUhE/btrZj0l3evQ/sx0yJmv03u4BUoaOshlhsK/img.png)
'알고리즘' 카테고리의 다른 글
[BOJ / Python] 지름길 (0) | 2023.02.21 |
---|---|
[BOJ / Python] 9372 상근이의 여행 (0) | 2023.02.20 |
[BOJ / Python] 15486 퇴사 2 (0) | 2023.02.13 |
[BOJ / Python] 2022 사다리 (0) | 2023.02.09 |
[BOJ / Python] 3107 IPv6 (0) | 2023.02.08 |