https://www.acmicpc.net/problem/1717
문제 해석
- 합집합과 같은 집합인지 확인하는 문제로 분리집합(Union-Find)의 대표적인 문제이다.
구현 방법
- 총 3단계로 나누어 구현
- Root를 저장할 배열 초기화
- Find 함수 작성
- 같은 Root를 가지고 있는지 확인( 같은 집합인가 확인)
- Union 함수 작성
- 서로 다른 두 집합을 합집합 (Root 를 같게 함)
- 이미 같으면 할 필요 없음
코드
# 1717 집합의 표현
import sys
input = sys.stdin.readline
def find(num:int)->int:
if parent[num] == num:
return num
parent[num] = find(parent[num])
return parent[num]
def union(num1:int, num2:int) -> None:
x = find(num1)
y = find(num2)
if x != y:
parent[y] = x
return
def solution(n:int, m:int) -> None:
for _ in range(m):
order, a, b = map(int, input().split())
if order: # 같은 집합인가 확인
if find(a) == find(b):
print("yes")
else:
print("no")
else: # 합집합
union(a, b)
return
if __name__ == "__main__":
# input
n, m = map(int, input().split())
parent = [i for i in range(n+1)]
solution(n, m)
반응형
'Algorithm > BaekJoon Review' 카테고리의 다른 글
9935. 문자열 폭발 (0) | 2024.01.21 |
---|---|
1149. RGB거리 (0) | 2024.01.15 |
15684. 사다리 조작 (1) | 2024.01.12 |
1932. 정수 삼각형 (0) | 2024.01.11 |
18111. 마인크래프트 (1) | 2024.01.09 |