💡코딩테스트/프로그래머스
[프로그래머스 | 파이썬 python] 순위
두_두
2023. 5. 21. 01:31
그래프 | BFS
🌏 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👽 풀이 ➡️ BFS 이용
자신이 이긴 선수 + 진 선수의 합이 n-1이 되는 경우 순위를 알 수 있다고 할 수 있다.
from collections import deque
def solution(n, results):
answer = 0
graph = [[] for _ in range(n+1)]
graph1 = [[] for _ in range(n+1)]
for result in results:
a,b = result
graph[a].append(b)
graph1[b].append(a)
def win(cur):
queue = deque()
queue.append(cur)
visited = [0 for _ in range(n+1)]
total = 0
while queue:
cur = queue.popleft()
for i in graph[cur]:
if visited[i] == 0:
visited[i] = 1
queue.append(i)
total += 1
return total
def lose(cur):
queue = deque()
queue.append(cur)
visited = [0 for _ in range(n+1)]
total = 0
while queue:
cur = queue.popleft()
for i in graph1[cur]:
if visited[i] == 0:
visited[i] = 1
queue.append(i)
total += 1
return total
for i in range(1,n+1):
if win(i) + lose(i) == n-1:
answer += 1
return answer
728x90