[ BOJ / Python ] 17352번 여러분의 다리가 되어 드리겠습니다!

황승환·2022년 8월 31일
0

Python

목록 보기
471/498

이번 문제는 유니온-파인드 알고리즘을 활용하여 쉽게 해결하였다. 주어지는 두 쌍의 섬들을 합치고 부모를 구하도록 한다. 이 과정에서 갱신되지 않는 경우가 존재하기 때문에 2중 for문을 돌며 i와 j의 find 반환 값이 다를 경우에 i와 j를 출력하고 프로그램을 종료하도록 하여 해결하였다.

Code

def find(a):
    if a != parent[a]:
        parent[a] = find(parent[a])
    return parent[a]
def union(a, b):
    a = find(a)
    b = find(b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b
n = int(input())
parent = [i for i in range(n+1)]
for _ in range(n-2):
    a, b = map(int, input().split())
    union(a, b)
for i in range(1, n+1):
    for j in range(1, n+1):
        if find(i) != find(j):
            print(i, j)
            quit()

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글