300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 네트워크
- 프로그래머스
- OS
- google coding competition
- 코딩테스트
- 구글 킥스타트
- 코딩
- kick start
- dp
- 프로그래밍
- 그래프
- BFS
- 동적프로그래밍
- 코딩 테스트
- PYTHON
- 운영체제
- nlp
- 알고리즘
- 브루트포스
- 순열
- 파이썬
- 딥러닝
- 동적 프로그래밍
- 리눅스
- linux
- AI
- DFS
- 백준
- 킥스타트
- CSS
Archives
- Today
- Total
오뚝이개발자
순위 본문
728x90
300x250
문제설명
programmers.co.kr/learn/courses/30/lessons/49191
풀이
순위를 확실히 알기 위해선 해당 사람이 이기고 진 정보의 갯수 합이 n-1개가 되어야 한다. 여기서 중요한 점은
- A를 이긴 사람은 A에게 진 사람을 이기고
- A에 진 사람은 A에게 이긴 사람에 진다
는 것이다.
def solution(n, results):
answer = 0
# win[i] : i가 이긴 사람의 집합
# lose[i] : i가 지는 사람의 집합
win, lose = {}, {}
for i in range(1, n+1):
win[i], lose[i] = set(), set()
for result in results:
win[result[0]].add(result[1])
lose[result[1]].add(result[0])
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])
for i in range(1, n+1):
if len(win[i]) + len(lose[i]) == n-1:
answer += 1
return answer
728x90
300x250
Comments