본문 바로가기
코딩 테스트/최소 신장 트리

[백준 1922번] 네트워크 연결 문제 풀이 (with Python)

by 서영선 2023. 9. 13.

 

 

< 문제 >

 

 

< 입출력 >

1922번: 네트워크 연결 (acmicpc.net)

 

1922번: 네트워크 연결

이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.

www.acmicpc.net

 

 

 

 < 풀이 >

 

parent = [ i for i in range(노드 수 +1) ] 로 루트 노드를 저장하는 배열을 만든다.

루트 노드가 다른 것은 연결이 안되었다는 뜻이므로, 비용이 작은 순으로 정렬하고 루트 노드가 다른 경우 연결하였다. 

 

 

< 코드 >

import sys

input = sys.stdin.readline


def find(a):                  # 루트 노드 찾기 
    if a == parent[a]:        # 루트 노드가 자신인 경우, 자기 자신 반환
        return a
    parent[a] = find(parent[a])   
    return parent[a]               


def union(a, b):              # 두 노드 연결하기 
    a = find(a)               
    b = find(b)
    if b < a:                 # 두 노드 중 루트 노드가 작은 것을 두 노드의 루트 노드로 삼음
        parent[a] = b         
    else:
        parent[b] = a


arr = []
N = int(input())
M = int(input())
parent = [i for i in range(N + 1)]   # 루트 노드 초기화
result = 0      

for _ in range(M):
    a, b, c = map(int, input().split())  
    arr.append((a, b, c))

arr.sort(key=lambda x: x[2])         # 비용이 작은 순서대로 정렬
for a, b, c in arr:
    if find(a) != find(b):           # 루트 노드가 다른 경우 두 노드 연결하기
        union(a, b)
        result += c
print(result)

댓글