위상 정렬 예제 - 1

문제 분석

  • 학생들을 노드로 생각하고, 키 순서 비교 데이터로 에지를 만든다고 생각했을 때 노드의 순서를 도출하는 가장 기본적인 문제이다.

  • 답이 여러 개일 때 아무거나 출력해도 된다는 전제는 위상 정렬의 결과가 항상 유일하지 않다는 알고리즘의 전제와 동일하다는 것을 알 수 있다.

손으로 풀어보기

  1. 인접 리스트에 노드 데이터를 저장하고, 진입 차수 배열값을 업데이트 한다.

img_5.png
  1. 다음 순서에 따라 위상 정렬을 수행한다.

    1. 진입 차수가 0인 노드를 큐에 저장

    2. 큐에서 데이터를 뽑아 와서 해당 노드를 탐색 결과에 추가하고, 해당 노드가 가리키는 노드의 진입 차수를 1씩 감소한다.

    3. 감소했을 때 진입 차수가 0이 되는 노드를 큐에 삽입한다.

    4. 큐가 빌 때까지 위 과정을 반복한다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated