https://github.com/ndb796/python-for-coding-test/blob/master/10/3.py
def find(parent, x): # 경로 압축 사용
# 루트 노드가 아니라면, 루트 노드를 찾을 때까지 재귀적으로 호출
if parent[x] != x:
parent[x] = find(parent, parent[x])
return parent[x]
# 두 원소가 속한 집합을 합치기
def union(parent, a, b):
a_p = find(parent, a)
b_p = find(parent, b)
if a_p < b_p:
parent[b_p] = a_p
else:
parent[a_p] = b_p
parent = [0] * (n + 1)
for i in range(1, n+1):
parent[i] =i
위의 코드가 핵심
경로 압축을 한 코드이다.
경로압축을 했는데도 시간 초과가 난다면 union by rank로 해결할 수 있다.
대부분 문제는 경로 압축으로 해결되는데 안되는 경우 union by rank를 사용하면 거의 됨
'개발 > Algorithm' 카테고리의 다른 글
코딩테스트를 위한 파이썬 TIPS (0) | 2023.03.23 |
---|---|
비트마스킹 : Bit Masking 관련 Python 함수 (0) | 2023.03.03 |
[Algorithm] 백준 BOJ 2467 용액 python 파이썬 투포인터 골드5 (0) | 2022.11.23 |
[Algorithm] 백준 BOJ 1477 휴게소 세우기 python 파이썬 이분탐색 골드 4 (0) | 2022.10.05 |
[Algorithm] 백준 BOJ 5904 Moo 게임 python 파이썬 분할정복 골드 5 (0) | 2022.09.15 |