728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/49191?language=python3
코딩테스트 연습 - 순위
5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2
programmers.co.kr
최종 코드
hwayeon351/Programmers-Algorithms
프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.
github.com
from collections import defaultdict
def solution(n, results):
answer = 0
#key = 사람, value = key를 이긴 사람
winner = defaultdict(set)
#key = 사람, value = key한테 진 사람
loser = defaultdict(set)
for win, lose in results:
winner[lose].add(win)
loser[win].add(lose)
for i in range(1, n+1):
#i를 이긴 사람들은 i한테 진 사람들도 이긴다
for w in winner[i]:
loser[w].update(loser[i])
#i한테 진 사람들은 i를 이긴 사람들한테도 진다
for l in loser[i]:
winner[l].update(winner[i])
for i in range(1, n+1):
if len(winner[i]) + len(loser[i]) == n-1: answer += 1
return answer
풀이 과정
풀이 시간 1시간 10분
key를 이긴 사람들을 value로 하는 winner 딕셔너리와 key한테 진 사람들을 value로 하는 loser 딕셔너리를 만들어서 주어진 results를 통해 딕셔너리를 최대한 채운다. 그 다음 key값을 기준으로winner와 loser의 value의 개수가 n-1이라면 key의 순위를 알 수 있다.
from collections import defaultdict
def solution(n, results):
answer = 0
#key = 사람, value = key를 이긴 사람
winner = defaultdict(set)
#key = 사람, value = key한테 진 사람
loser = defaultdict(set)
for win, lose in results:
#lose를 이긴 사람에 win을 추가
winner[lose].add(win)
#win에게 진 사람에 lose를 추가
loser[win].add(lose)
for i in range(1, n+1):
#i를 이긴 사람들은 i한테 진 사람들도 이긴다
for w in winner[i]:
loser[w].update(loser[i])
#i한테 진 사람들은 i를 이긴 사람들한테도 진다
for l in loser[i]:
winner[l].update(winner[i])
for i in range(1, n+1):
#i를 이긴 사람의 수와 i한테 진 사람의 수가 n-1인 경우, i의 순위를 알 수 있으므로 +1
if len(winner[i]) + len(loser[i]) == n-1: answer += 1
return answer
#시간복잡도 = O(n^3) 공간복잡도 = O(n^2)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 2 x n 타일링 Python3 (0) | 2021.07.20 |
---|---|
Level 3 다단계 칫솔 판매 Python 3 (0) | 2021.07.19 |
Level 3 가장 먼 노드 Python3 (0) | 2021.07.18 |
Level 3 단속카메라 Python3 (0) | 2021.07.16 |
Level 2 큰 수 만들기 Python3 (0) | 2021.07.15 |