문제:
풀이 방법:
입출력 예시를 통해서 살펴 보면 2번선수의 경우에는 모든 경기기록이 있어서 순위를 알 수 있지만 5번 선수는 2번 선수와의 기록이 있지만 순위를 유추할 수 있다. 왜냐하면 2번이 1,3,4번 선수한테 졌는데 5번이 2번한테 졌으므로 5번은 당연히 1,3,4번 선수한테 진다는 것을 알 수 있다.(1,3,4 > 2 > 5) 또한 2번이 5번을 이겼기 때문에 5번이 이긴 사람도 당연히 이길 수 있다. (이 문제에서는 이러한 케이스가 없긴 하다.)
처음에는 리스트로 했더니 시간초과가 발생해서 이를 set으로 바꿔서 했더니 시간초과가 발생하지 않았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def solution(n, results): answer=0 win={} lose={} for i in range(1,n+1): win[i]=set() lose[i]=set() results.sort() for i in range(1,n+1): for re in results: if re[0]==i: win[i].add(re[1]) if re[1]==i: lose[i].add(re[0]) for j in win[i]: lose[j].update(lose[i]) for j in lose[i]: win[j].update(win[i]) for i in range(1,n+1): if len(win[i])+len(lose[i])==n-1: answer+=1 return answer | cs |
문제 링크:
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1009. 분산처리 (0) | 2019.08.01 |
---|---|
[Programmers]Lv 3.배달 (3) | 2019.07.31 |
[Programmers]Lv3. 가장 먼 노드 (0) | 2019.07.29 |
[Programmers]Lv 4. 3xn 타일링 (2) | 2019.07.28 |
[BOJ]2805. 나무 자르기 (0) | 2019.07.27 |