정답률을 보고 겁을 먹었는데 간단한 문제였다.
입력으로 주어진 그래프에 트리가 있는지 판별하는 문제로,
중요한 것은 사이클이 존재하는지를 체크하는 것이다.
그래프가 존재하지 않을수도 여러개 존재할 수도 있기 때문에
union-find 알고리즘을 사용하여 루트노드를 기록하고
사이클이 존재하는지 체크하였다.
사이클이 존재할 경우 트리의 개수를 카운팅 하지 않는다.
# 4803 트리 - union find 사용
import sys
input= sys.stdin.readline
flag = True
def find(x):
if parent[x] != x:
parent[x] = find(parent[x])
return parent[x]
def union(v,u):
root1=find(v)
root2=find(u)
if root1<root2:
parent[root2] = root1
elif root1>root2:
parent[root1] = root2
else:
for i in range(len(parent)):
if parent[i] == root1==root2:
parent[i]=0
cnt = 0
while True:
cnt+=1
n,m = map(int, input().split())
if n==0==m:
break
parent=[0] *(n+1)
for i in range(n+1):
parent[i]=i
for i in range(m):
a, b = map(int, input().split())
union(a,b)
rst=set()
for i in range(1, n+1):
if find(i) != 0:
rst.add(find(i))
size = len(list(rst))
if size == 0:
print("Case %d: No trees." % cnt)
elif size == 1:
print("Case %d: There is one tree." % cnt)
else:
print("Case %d: A forest of %d trees." % (cnt ,size))
728x90
'자료구조 & 알고리즘 & cs > CodingTest' 카테고리의 다른 글
[python] 프로그래머스 Lv2. - 기능개발 (0) | 2023.06.01 |
---|---|
[java/python] 프로그래머스 Lv2. - n진수 게임 (1) | 2023.05.26 |
[python] 1167 - 트리의 지름 (0) | 2023.05.23 |
[java/python] 프로그래머스 Lv2. - JadenCase 문자열 만들기 (0) | 2023.05.17 |
[java/python] 프로그래머스 Lv2. - 하노이 탑 (0) | 2023.05.16 |