프로그래밍/Python

[Python] 백준 2623 음악프로그램

모영이 2021. 3. 10. 17:42

 

2623번: 음악프로그램

첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한

www.acmicpc.net

위상정렬 : 위상정렬의 핵심은 그래프와 진입차수 같다. 여기 입력이 꼬여버리면 복잡해진다. 마지막에 주의할 점은 가수 순서를 못만들때를 고려해 주어야 한다. result의 길이로 판별을 했다.

 

전체코드

import sys
import collections

input = sys.stdin.readline

N, M = map(int, input().split())
inDegree = [0 for _ in range(N + 1)]
graph = collections.defaultdict(list)
for _ in range(M):
    singer = list(map(int, input().split()))[1:]
    for i in range(1, len(singer)):
        graph[singer[i - 1]].append(singer[i])
        inDegree[singer[i]] += 1

queue = collections.deque()
for i in range(1, N + 1):
    if inDegree[i] == 0:
        queue.append(i)

result = []
while queue:
    node = queue.popleft()
    result.append(node)
    for i in graph[node]:
        inDegree[i] -= 1
        if inDegree[i] == 0:
            queue.append(i)
if len(result) == N:
    print(*result)
else:
    print(0)

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 백준 2476 용액  (0) 2021.03.30
[Python] 백준 14567 선수과목 (Prerequisite)  (0) 2021.03.12
[Python] 백준 2056 작업  (0) 2021.03.10
[Python] 백준 1766 문제집  (0) 2021.03.10
[Python] 백준 1516 게임 개발  (0) 2021.03.10