KEEP GOING
[python] SWEA 5248 : 그룹 나누기 본문
반응형
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
1. 코드 구현 (deque 사용)
from collections import deque
def find(parent, x):
if parent[x] != x:
return find(parent, parent[x])
return x
def union(parent, x, y):
x = find(parent, x)
y = find(parent, y)
if x < y:
parent[y] = x
else:
parent[x] = y
for tc in range(1, int(input())+1):
n, m = map(int, input().split())
data = list(map(int, input().split()))
q = deque(data)
parent = [i for i in range(n+1)]
while q:
a = q.popleft()
b = q.popleft()
union(parent, a, b)
result = set()
for i in range(1, n+1):
data = find(parent, i)
result.add(data)
print(f'#{tc} {len(result)}')
2. 코드 구현 (for문 사용)
def find(parent, x):
if parent[x] != x:
return find(parent, parent[x])
return x
def union(parent, x, y):
x = find(parent, x)
y = find(parent, y)
if x < y:
parent[y] = x
else:
parent[x] = y
for tc in range(1, int(input())+1):
n, m = map(int, input().split())
data = list(map(int, input().split()))
parent = [i for i in range(n+1)]
for i in range(0, 2*m, 2):
union(parent, data[i], data[i+1])
result = set()
for i in range(1, n+1):
data = find(parent, i)
result.add(data)
print(f'#{tc} {len(result)}')
서로소 부분 집합을 가지고 서로소 집합을 만들기 위한 자료구조 : union + find
서로소 집합 : {1,3,5} {2,7,9}
서로소 부분집합 : {1,3} {3,5} {7,2} {7,9}
union : 각 원소가 포함된 집합을 하나로 합치기
find : 속한 집합의 루트 노드 찾기 (부모 노드를 통해 어떤 집합에 속했는지 확인 가능)
1. 부모 테이블 자기 자신으로 초기화
2. 주어진 두 노드에 대해 union 진행
3. 2번 반복
반응형
'code review' 카테고리의 다른 글
[python] 백준 10971번: 외판원 순회 2 (0) | 2022.05.27 |
---|---|
[python] LCA 정리(백준 11437번 : LCA, 11438번 : LCA2) (0) | 2022.05.19 |
[python] 백준 2884번 : 알람 시계 (0) | 2022.04.25 |
Comments