차밍이
[Python] 백준 4195번 친구 네트워크 - 유니온 파인드(Union Find) 활용 본문
반응형
친구 네트워크
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
3 초 | 256 MB | 11608 | 3704 | 1925 | 26.658% |
문제
민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다.
어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오.
친구 네트워크란 친구 관계만으로 이동할 수 있는 사이를 말한다.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진다. 친구 관계는 두 사용자의 아이디로 이루어져 있으며, 알파벳 대문자 또는 소문자로만 이루어진 길이 20 이하의 문자열이다.
출력
친구 관계가 생길 때마다, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오.
예제 입력 1 복사
2
3
Fred Barney
Barney Betty
Betty Wilma
3
Fred Barney
Betty Wilma
Barney Betty
예제 출력 1 복사
2
3
4
2
2
4
소스코드
from sys import stdin
def find(x):
if parent[x] == x: return x
else:
p = find(parent[x])
parent[x] = p
return p
def union(x, y):
x, y = find(x), find(y)
if x != y:
parent[y] = x
number[x] += number[y]
print(number[x])
for _ in range(int(stdin.readline())):
num = int(stdin.readline())
parent, number = {}, {}
for i in range(num):
a, b = stdin.readline().split()
if a not in parent:
parent[a] = a
number[a] = 1
if b not in parent:
parent[b] = b
number[b] = 1
union(a, b)
-
결과
- 메모리 : 30488 KB
- 시간 : 304 ms
-
문제 풀이
- 이 문제를 해결하기 위해서는 유니온 파인드(Union Find) 알고리즘에 대한 기본적인 내용을 알고있어야 문제를 해결하기 수월합니다.
- 유니온 파인드는 기본 Root노드를 기준으로 원소들을 가지는 집합을 만듭니다. 유니온 파인드에 대한 내용은 https://twpower.github.io/115-union-find-disjoint-set 에서 참고하시면 되겠습니다.
- 일반적인 유니온 파인드와 다르게 숫자가 아닌 문자열이 들어가므로 친구의 숫자를 저장하기 위한 리스트를 하나 더 선언해주어야합니다.
- 나머지 문제 풀이는 유니온 파인드와 동일하게 문제를 해결해주시면 되겠습니다.
-
문제 출처
반응형
'파이썬 > 알고리즘' 카테고리의 다른 글
[파이썬] 백준 2667번 단지번호붙이기 - DFS 방식 문제 풀이 (0) | 2020.03.08 |
---|---|
[파이썬] 백준 2606번 바이러스 - BFS방식과 DFS 방식 비교 (0) | 2020.03.07 |
[파이썬] 백준 1260번 DFS와 BFS (4) | 2020.03.07 |
[Python] 백준 1654번 랜선 자르기 - 이분 탐색 (0) | 2020.03.06 |
[파이썬] 백준 5397번 키로거 - 스택 발상의 전환 (1) | 2020.02.29 |
[Python] 백준 10816번 숫자 카드 2 - 다양한 풀이 이분탐색, 해시, Counter (2) | 2020.02.27 |
[Python] 백준 1920번 수 찾기 - 두가지 풀이:이분탐색과 자료형 (1) | 2020.02.27 |
[Python] 백준 5430번 AC - 효율적인 알고리즘 3720ms에서 132ms (1) | 2020.02.24 |
관련된 글 보기
Comments