[BOJ] #4195 - 친구 네트워크
2021. 6. 13. 18:43ㆍProblem Solving/Online Judge
4195번: 친구 네트워크
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진
www.acmicpc.net
** 문제 유형
- 해시, 집합, 네트워크
** 풀이
- 해시를 활용한 Union-Find(합집합 찾기) 알고리즘을 이용해 문제 해결
- 파이썬 - dictionary 자료형을 해시처럼 사용
+) Union-Find 알고리즘
- 원소들의 연결 여부를 확인하는 알고리즘
- 원소가 어느 부분 집합에 포함되어 있는지 알 수 있음
# 원소가 포함되어 있는 부분집합의 부모(대표자) 찾기
def find(x):
if x == parent[x]:
return x
else:
p = find(parent[x])
parent[x] = p
return parent[x]
# 원소의 부모(대표)를 비교해서 합집합
def union(x, y):
x = find(x)
y = find(y)
if x != y: # 각각 다른 부분 집합에 존재
parent[y] = x
number[x] += number[y]
test_case = int(input())
for _ in range(test_case):
f = int(input())
parent = dict()
number = dict()
for _ in range(f):
x, y = 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)])
'Problem Solving > Online Judge' 카테고리의 다른 글
[BOJ] #1427 - 소트인사이드 (0) | 2021.06.14 |
---|---|
[BOJ] #2750 - 수 정렬하기 (0) | 2021.06.13 |
[BOJ] #1920 - 수 찾기 (0) | 2021.06.13 |
[BOJ] #10930 - SHA-256 (0) | 2021.06.13 |
[BOJ] #5397 - 키로거 (0) | 2021.06.13 |