코딩하는 해맑은 거북이

[Python] 음악프로그램 - 백준 (위상정렬) 본문

코딩테스트

[Python] 음악프로그램 - 백준 (위상정렬)

#CJE 2023. 9. 11.
해당 글은 백준 2623번 '음악프로그램' 문제를 다룬다.

문제

https://www.acmicpc.net/problem/2623

 

2623번: 음악프로그램

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

www.acmicpc.net

 

설명

해당 문제는 위상 정렬 알고리즘으로 해결할 수 있다.

m명의 PD가 정한 순서들을 모두 반영할 수 있는지 여부는 result 리스트의 갯수가 가수의 수(n)인지를 파악할 수 있다.

 

코드

from collections import deque

n, m = map(int, input().split())
indegree = [0]*(n+1)
graph = [[] for _ in range(n+1)]

for _ in range(m):
    arr = list(map(int, input().split()))
    for i in range(1, len(arr)-1):
        graph[arr[i]].append(arr[i+1])
        indegree[arr[i+1]] += 1

q = deque()
for i in range(1, n+1):
    if indegree[i] == 0:
        q.append(i)

result = []
while q:
    now = q.popleft()
    result.append(now)
    for i in graph[now]:
        indegree[i] -= 1
        if indegree[i] == 0:
            q.append(i)

if len(result) != n:
    print(0)
else:
    print('\n'.join(map(str, result)))

     

 

 

Comments