Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 브루트포스
- til
- 백트래킹
- 깊이우선탐색
- programmers
- 99클럽
- 백준
- SSAFY수료식
- 프로그래머스
- 너비우선탐색
- 개발자스터디
- 구현
- 삼성청년SW아카데미
- python
- 문자열
- 항해
- 싸피
- BOJ
- 다이나믹프로그래밍
- 위상정렬
- 자바
- BFS
- ssafy
- java
- 파이썬
- dfs
- 알고리즘
- DP
- 코딩테스트
- 99일지
Archives
- Today
- Total
EunJng
[Algorithm] Union Find(유니온 파인드) 본문
Union Find
- 상호 배타적으로 이루어진 집합을 효율적으로 표현하기 위해 만들어진 자료구조
- Disjoint-set(서로소 집합, 상호배타 집합) : 서로 중복 포함된 원소가 없는 집합들. 즉, 교집합이 없다.
집합에 속한 대표자(representative)를 통해 각 집합을 구분한다.
- Disjoint-set(서로소 집합, 상호배타 집합) : 서로 중복 포함된 원소가 없는 집합들. 즉, 교집합이 없다.
- Make-Set, Find, Union의 세 연산을 이용한다.
- make-set(x)
- 유일한 멤버 x를 포함하는 새로운 집합을 생성하는 연산
- parents = [i for i in range(n)]과 같이 집합 생성
- find(x)
- x를 포함하는 집합을 찾는 연산
- 재귀 혹은 반복문을 통해 구현할 수 있다.
# 재귀
def find(x):
if x == parents[x]: # 자기 자신이 부모 노드라면(루트 노드) return x
return x
parents[x] = find(parents[x]) # 부모 노드 찾기 및 갱신
return parents[x]
# while 문 사용
def find(x):
while x != parents[x]:
x = parents[x]
return x
- union(x, y)
- x와 y를 포함하는 두 집합을 통합하는 연산
def union(x, y)::
x = find(x)
y = find(y)
parents[y] = x
관련 문제(백준 1976) 풀이
[BOJ] 1976 여행 가자 | Python
문제 백준 1976번 여행 가자 | 골드4 https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도,
eunjng.tistory.com
'STUDY > CS' 카테고리의 다른 글
[HTTP] HTTP 웹 기본 지식 #08 (0) | 2024.03.06 |
---|---|
[HTTP] HTTP 웹 기본 지식 #07 (0) | 2024.03.05 |
[HTTP] HTTP 웹 기본 지식 #06 (0) | 2024.03.04 |
[HTTP] HTTP 웹 기본 지식 #05 (1) | 2024.03.01 |
[HTTP] HTTP 웹 기본 지식 #04 (0) | 2024.03.01 |