유니온 파인드 예제 - 3
문제 분석
손으로 풀어보기
슈도코드
n(사람의 수) m(파티의 수)
trues(진실을 아는 사람)
t (진실을 아는 사람 수)
party(파티 데이터)
find(a):
a가 대표 노드면 리턴
아니면 a의 대표 노드값을 find(parent[a])값으로 저장(재귀 형태)
union(a, b):
a와 b의 대표 노드 찾기
두 원소의 대표 노드끼리 연결
파티 데이터 저장
for n 반복:
대표 노드를 자기 자신으로 초기화
for m 반복:
first(각 파티의 1번째 사람)
for j 각 파티의 사람 수만큼:
union(first, j) # 각 파티에 참여한 사람들을 1개의 그룹으로 만들기
for m 반복:
first(각 파티의 1번째 사람)
for j 진실을 아는 사람들의 수만큼:
find(first), find(trues[j]) 비교
모두 다른 경우 결괏값 1 증가
결괏값 출력코드 구현 - 파이썬
코드 구현 - 자바
Last updated