커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
왜 유니온파인드 연산 이후 parent 가지고 한번 더? 정렬을 해야 하는지 모르겠습니다.
[스킬업] 실무에 바로 쓰이는 알고리즘 by Python
5주차
북마크
현*람
댓글
1
추천
0
조회수
3
조회수
3
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


https://www.acmicpc.net/problem/11724


이 문제를 풀기 위해 유니온파인드를 수행했는데, 처음에 union 연산 이후에 parent 배열 받은거로만 처리하려했는데 통과해 실패했었습니다.

찾아보니까 한번 더 돌아줘야 한다는데 왜 그런지 설명을 해준데가 없어서 질문드립니다.






작성한 코드 및 에러 메세지

import sys
input = sys.stdin.readline
N, M = map(int, input().split())
parent = [i for i in range(N + 1)]
edges = []
def find_parent(parent, n):
    if(n != parent[n]):
        parent[n] = find_parent(parent, parent[n])
    return parent[n]


def union(parent, a, b):
    a = find_parent(parent, a);
    b = find_parent(parent, b);
    if(a < b):
        parent[b] = a
    else:
        parent[a] = b


for _ in range(M):
    a, b = map(int,input().split())
    edges.append((a, b))
edges = sorted([(min(a, b), max(a, b)) for a, b in edges])
for e in edges:
    a, b = e
    union(parent,a, b)


# ??? 왜 한번 더 돌아야 하지?
for p in range(len(parent)):
    find_parent(parent, p)
print(len(list(set(parent))) - 1)

Tip 1) </> 아이콘을 눌러 코드박스를 만들어 보세요.

Tip 2) Ctrl+A(맥의 경우 Command+A) 단축키로 코드를 한 번에 선택할 수 있어요!




취소
 공유
취소
댓글 0
댓글 알림
나의얼굴