백준 공항 문제를 풀다가 Union - Find가 무엇인지 모르겠어서 공부한 내용을 정리해보려 한다.
Union - Find란?
Disjoint set을 표현할 때 사용하는 알고리즘
트리구조를 이용해 구현하는 것이 제일 효율적이다
함수
- union(x, y) : x가 속한 집합과 y가 속한 집합을 합친다
- find(x) : x가 속한 집합의 루트노드 값을 반환한다
- 재귀함수를 이용하는데, 루트노드가 들어온 경우는 그거 그대로 반환하고,
- 아닌경우는 부모노드를 계속 찾아서 반환한다
초기화는
parents=[i for i in range(g+1)] 방식으로 하면 된다
공항 문제에서는 1번부터 gi까지의 게이트 중 빈 게이트를 이용하면 되므로, i번째 비행기의 게이트 값이 부모 루트가 되어서,
그거에 속한 애들을 구하는 알고리즘이 필요해서 union - find를 이용한 것이라고 이해했다.
그래서 같은 게이트 번호를 가진 비행기들을 최대한 도킹시킬 수 있다.
참고 블로그 : https://gmlwjd9405.github.io/2018/08/31/algorithm-union-find.html
'알고리즘 &자료구조' 카테고리의 다른 글
[자료구조/Python] 복습 2. LinkedList (0) | 2022.12.22 |
---|---|
[자료구조/Python] 복습 1. Queue, Stack (0) | 2022.12.22 |
[알고리즘] 백트래킹 (0) | 2021.11.10 |
[알고리즘] 허프만 코딩 (0) | 2021.11.09 |
[알고리즘] 21. 탐욕 알고리즘 (0) | 2021.11.08 |