위상 정렬·연습 문제

위상 정렬과 사이클 판별

문제 설명PROBLEM

위상 정렬과 사이클 판별

왜 이 문제를 푸나요?

작업 순서·선수 과목처럼 선후 관계가 있는 문제를 해결하는 표준 알고리즘입니다. 정렬 결과를 만드는 동시에 사이클도 판별하는 방법을 익힙니다.

익혀야 할 개념

  • 진입차수
  • Kahn 알고리즘
  • 최소 힙
  • DAG와 사이클 판별

과제

정점 수 n과 방향 간선 [선행, 후행] 목록이 주어집니다. 선후 관계를 만족하는 위상 정렬 결과를 반환하세요. 동시에 선택 가능한 정점 중 번호가 가장 작은 정점을 먼저 선택하고, 사이클이 있으면 빈 리스트를 반환합니다.

함수

topological_sort(n, edges)

목표 복잡도

최소 힙 사용 시 O((V+E) log V)

테스트 케이스

실행하면 아래 순서대로 채점합니다. print() 출력도 이 순서대로 쌓입니다.

#이름nedges기대값
1여러 시작점6[[0, 2], [1, 2], [1, 3], [2, 4], [3, 4]][0, 1, 2, 3, 4, 5]
2일직선4[[2, 0], [0, 3], [3, 1]][2, 0, 3, 1]
3사이클3[[0, 1], [1, 2], [2, 0]][]
4간선 없는 그래프4[][0, 1, 2, 3]
5합류 의존성5[[0, 2], [1, 2], [2, 3], [2, 4]][0, 1, 2, 3, 4]

Python 표준 라이브러리는 사용할 수 있습니다. 함수 이름과 매개변수는 제시된 형태를 유지하세요.

개념 노트와 실수 포인트

위상 정렬

  • 방향 비순환 그래프에서 선후 관계를 만족하는 순서를 찾습니다.
  • 진입차수 0인 정점을 반복 제거하며, 결과 수가 정점 수보다 작으면 사이클이 있습니다.