문제 링크
풀이
- union find와 딕셔너리 사용해서 풀이
parent : 이름이 key, 부모 이름이 value
number : 이름이 key, 속해있는 그래프에 있는 친구 수가 value
# 부모 찾기
def find(x):
if x == parent[x]:
return x
parent[x] = find(parent[x])
return parent[x]
# 두 친구 합치기
def union(x,y):
x = find(x)
y = find(y)
# 같은 그래프에 속해있지 않으면
if x != y:
# y의 부모를 x로 만들기
parent[y] = x
number[x] += number[y]
t = int(input())
for _ in range(t):
f = int(input())
# 부모 저장
parent = dict()
# 네트워크에 몇 명 있는지 저장
number = dict()
for i in range(f):
x, y = map(str, input().split())
# 자기 자신으로 초기화
if x not in parent:
parent[x] = x
number[x] = 1
if y not in parent:
parent[y] = y
number[y] = 1
union(x,y)
print(number[find(x)])
'개발 > algorithm' 카테고리의 다른 글
[백준 2002번] 수들의 합 2 - python / 투 포인터 (0) | 2022.04.25 |
---|---|
[프로그래머스][level3] 자물쇠와 열쇠 - python (0) | 2022.04.25 |
[백준 1976번] 여행 가자 - python (0) | 2022.04.22 |
[백준 1717번] 집합의 표현 - python / union-find 알고리즘 (0) | 2022.04.22 |
[프로그래머스][level5] 방의 개수 - python (0) | 2022.04.21 |