순서에 조건이 붙어있는 경우 일반적인 DFS같은 것으로 구현했을 때, 깔끔하게 구현이 되지 않음을 많이 느꼈다. 이때마다 위상 정렬이라는 개념이 등장했고, 위상 정렬에 대해서 제대로 정리해보자
위상 정렬
: 주어진 조건을 위배하지 않으면서, 노드를 순서대로 정렬하는 것
위상 정렬을 할 그래프는 DAG
이어야 한다.
DAG
: Directed Acyclic Graph, 직접 연결된 사이클이 없는 그래프
한 마디로 사이클이 있는 그래프에서는 위상 정렬을 할 수가 없다
why? => 사이클이 존재하게 되면, 선행 조건이 없는 노드(시작점)을 찾을 수가 없기 때문에!!
진입차수
: node에 들어오는 edge의 수(한마디로 선행 조건의 수)4번 과정을 보면, 그래프에 사이클이 존재하는지
를 파악하는 방법도 위상 정렬이다.
위상 정렬에 대해 알아봤는데 생각보다 어렵지 않았다. 개념을 적용해서 문제를 풀어보자.