https://programmers.co.kr/learn/courses/30/lessons/49191?language=python3
set과 defaultdict를 이용한 풀이
from collections import defaultdict
def solution(n, results):
answer = 0
win, lose = defaultdict(set), defaultdict(set)
for result in results:
lose[result[1]].add(result[0])
win[result[0]].add(result[1])
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
플로이드 워셜을 이용한 풀이
def solution(n, results):
total = [['?' for i in range(n)] for j in range(n)]
for i in range(n):
total[i][i] = 'SELF'
for result in results:
total[result[0]-1][result[1]-1] = 'WIN'
total[result[1]-1][result[0]-1] = 'LOSE'
for k in range(n):
for i in range(n):
for j in range(n):
if total[i][k] == 'WIN' and total[k][j] == 'WIN':
total[i][j] = 'WIN'
elif total[i][k] == 'LOSE' and total[k][j] == 'LOSE':
total[i][j] = 'LOSE'
answer = 0
for i in total:
if '?' not in i:
answer += 1
return answer
윗처럼 풀었지만 밑에 풀이가 더 직관적으로 이해하기 쉬웠다.
'코딩 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신규 아이디 추천 (python) (0) | 2022.05.06 |
---|---|
[프로그래머스] 신고 결과 받기 (python) (0) | 2022.05.05 |
[프로그래머스] 가장 먼 노드 (python) (0) | 2022.02.05 |
[프로그래머스] 디스크 컨트롤러 (python) (0) | 2022.01.06 |
[프로그래머스] 주식가격 (python) (0) | 2022.01.05 |