Programming/etc.

[알고리즘] 위상 정렬

코딩뽀시래기 2024. 5. 16. 16:06
728x90
 

[백준/Kotlin] 줄 세우기(2252)

문제https://www.acmicpc.net/problem/2252 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사

coding-ga-ding.tistory.com

 

위에서 풀이한 백준 문제를 풀 때 위상 정렬이라는 개념을 사용했는데, 어려워서 솔루션을 찾아 해결했었다. 위상 정렬에 대해 이해하고자 정리 해두려 한다!

 

✅ 위상 정렬이란?

  • 사이클이 없는 방향 그래프를 정렬한다고 생각하면 된다.
  • 방향 그래프를 방향성에 거스르지 않게 순서대로 나열하는 것

위상 정렬 알고리즘을 이해하려면 진입차수, 진출차수를 알아야 한다.

  • 진입차수: 노드로 들어오는 간선의 개수
  • 진출차수: 노드에서 나가는 간선의 개수

예를 들어, A -> B라면 A의 진입차수가 0이고, 진출차수가 1이다. 반대로 B의 진입차수는 1이고 진출차수는 0이다.

A -> B 라는 표시를 A가 B보다 앞에 있어야 하는데, 이때 진입차수가 0이면 해당 노드보다 앞에 위치해야 하는 노드가 없다는 뜻이 된다.

 

따라서 다음 과정을 거치면 정렬을 할 수 있게 된다.

  1. 각 노드의 진입차수를 구한다.
  2. 진입차수가 0인 노드를 큐에 넣는다.
  3. 큐에서 원소를 꺼내 나열하고, 해당 노드에서 나가는 간선을 그래프에서 제거한다. (해당 노드가 진입하는 노드의 진입차수를 -1 해준다)
  4. 3번 이후 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.
  5. 큐가 빌 때까지 3, 4번을 반복한다.

 

+) 참고

 

[알고리즘] 위상 정렬 (Topological Sorting)

정렬 알고리즘의 일종으로, 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다.조금 더 이론적인 설명은, 사이클이 없는 방향 그래프의 모든 노드를 '방

velog.io

 

 

위상 정렬(Topological sort) 개념 및 구현

목차 위상 정렬(Topological sort) 개념 및 구현 비순환 방향 그래프 (DAG: Directed Acyclic Graph) Directed Acyclic Graph (DAG)는 사이클이 없는 방향 그래프입니다. DAG는 이벤트 간의 우선순위를 나타내기 위해 주

yoongrammer.tistory.com

 

 

728x90