본문 바로가기

알고리즘/Baekjoon

Union-Find. [4195]

[1. 문제 설명]

친구 네트워크란 친구 관계만으로 이동할 수 있는 사이를 말한다.

친구 관계가 생길 때 마다, 두 사람의 친구 네트워크에 몇 명이 있는지 구하도록 한다.

 

 

[2. 풀이 접근]

문제를 아래와 같이 변형 해볼 수 있다.

=> 친구 네트워크 == 두 정점이 연결 혹은 두 정점이 같은 집합

=> 두 개의 집합이 합쳐질 때마다,

=> 집합에 속한 원소의 개수를 출력하도록 한다.

 

즉, 두 노드(집합) 을 합칠 때 마다,

합쳐진 집합에 속한 원소 개수를 출력하면 된다.

 

union find 로 접근한다.

 

문자열 id 를 정수형 id 로 변환해야 한다.

map 을 사용할 경우 O(1) 에 정수형 id 를 얻을 수 있다.

 

union 시, 균형 잡힌 tree 를 만들기 위한 rank 배열 이외 에

집합의 개수를 저장할 size 배열도 추가로 생성한다.

 

== 실수한 점 ==

친구 관계 수 F 는 최대 10만개까지 주어진다.

한 줄 당 문자열 id 는 2개 이므로

문자열 id 는 최대 20만개 까지 주어진다.

 

따라서, union find 를 위한 각 배열의 최대 크기는 20만이 되어야 한다.

 

 

[3. 코드]

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

투 포인터. [3273]  (0) 2022.10.08
Union-Find. [20040]  (0) 2022.10.06
Union-Find. [1976]  (0) 2022.10.04
Union-Find. [1717]  (0) 2022.10.04
트리. [4803]  (0) 2022.10.03