[백준/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이면 해당 노드보다 앞에 위치해야 하는 노드가 없다는 뜻이 된다.
따라서 다음 과정을 거치면 정렬을 할 수 있게 된다.
- 각 노드의 진입차수를 구한다.
- 진입차수가 0인 노드를 큐에 넣는다.
- 큐에서 원소를 꺼내 나열하고, 해당 노드에서 나가는 간선을 그래프에서 제거한다. (해당 노드가 진입하는 노드의 진입차수를 -1 해준다)
- 3번 이후 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.
- 큐가 빌 때까지 3, 4번을 반복한다.
+) 참고
[알고리즘] 위상 정렬 (Topological Sorting)
정렬 알고리즘의 일종으로, 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다.조금 더 이론적인 설명은, 사이클이 없는 방향 그래프의 모든 노드를 '방
velog.io
위상 정렬(Topological sort) 개념 및 구현
목차 위상 정렬(Topological sort) 개념 및 구현 비순환 방향 그래프 (DAG: Directed Acyclic Graph) Directed Acyclic Graph (DAG)는 사이클이 없는 방향 그래프입니다. DAG는 이벤트 간의 우선순위를 나타내기 위해 주
yoongrammer.tistory.com
'Programming > etc.' 카테고리의 다른 글
[Python] VS code Python 실행 방법 (0) | 2022.03.15 |
---|---|
[git] github repository 합치기 (0) | 2022.03.02 |
[코딩 테스트] 코딩 테스트 연습 github 기록 (0) | 2021.12.29 |
[개발자 면접] 개발자 면접 참고 자료 (0) | 2021.12.08 |
[프로그래밍] API란? (0) | 2021.08.11 |