This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
def find_parent(x): | |
if parent[x] != x: | |
parent[x] = find_parent(parent[x]) | |
return parent[x] | |
def union_parent(x, y): | |
x = find_parent(x) | |
y = find_parent(y) | |
if x < y: | |
parent[y] = x | |
else: | |
parent[x] = y | |
n, m = map(int, input().split()) | |
parent = [0]*(n+1) | |
for i in range(1, n+1): | |
parent[i] = i | |
for i in range(m): | |
x, y = map(int, sys.stdin.readline().split()) | |
union_parent(x, y) | |
s = set() | |
for i in range(1, n+1): | |
s.add(find_parent(i)) | |
if len(s) == 1: | |
print(1) | |
else: | |
print(len(s)) |
find_parent(x) 메소드가 최상단 부모 노드를 바로 재귀적으로 찾아 반환해 준다. 이를 이용하는 union_parent(x, y) 메소드는 두 노드를 비교하여 작은 노드를 큰 노드의 부모 노드로 연결시킨다. 해당 문제는 연결 요소의 개수를 세는 문제이므로 union_parent(x, y)을 통해 연결을 끝낸 뒤 각 노드의 부모노드를 set 자료형 안에 담아서 해결했다.
'코딩테스트 준비' 카테고리의 다른 글
전위 순회, 중위 순회, 후위 순회 (0) | 2021.02.24 |
---|---|
재귀 + dp + 조합 공식 (0) | 2021.02.24 |
itertools의 combinations를 이용한 부분수열 합 문제 (0) | 2021.02.24 |
큐 자료구조 문제 (0) | 2021.02.23 |
DP - 중 (0) | 2021.02.22 |