Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- GDSC
- softeer
- MVVM
- Flutter
- 코틀린
- Android
- 파이썬
- 자바
- aws
- kotlin
- 플러터
- 안드로이드
- 아마존 웹 서비스
- 개발
- baekjoon
- 알고리즘
- VSCode
- SWIFT
- DART
- 머신러닝
- programers
- 백준
- 현대sw
- java
- 소프티어
- 코테
- 다트
- 스위프트
- 프로그래머스
- Python
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 1922번(파이썬): 네트워크 연결 본문
문제
1922번: 네트워크 연결
이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다.
www.acmicpc.net
알고리즘
- 유니온-파인드를 통해 문제를 수행한다.
- 간선들의 가중치를 기준으로 정렬하여 최소 스패닝 트리의 가중치를 구한다.(비용)
- 반복문을 통해 두 간선들의 두 정점을 유니온-파인드를 통해 확인한다.
- 두 정점의 부모 노드가 같지 않다면 스패닝 트리인 것이다.
- 부모 노드가 같지 않은 두 정점을 작은 루트 노드를 기준으로 합친다.
코드
import sys
# 부모 노드 찾기
def find(p):
if p == parent[p]:
return p
parent[p] = find(parent[p])
return parent[p]
# 트리 합치기
def union(x, y):
x = find(x)
y = find(y)
if y < x:
parent[x] = y
else:
parent[y] = x
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]
graph.sort(key=lambda x : x[2])
parent = [i for i in range(n+1)]
answer = 0
for a, b, c in graph:
if find(a) != find(b):
union(a, b)
answer += c
print(answer)
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2573번(파이썬): 빙산 (0) | 2022.06.26 |
---|---|
[baekjoon] 백준 1806번(파이썬): 부분합 (0) | 2022.06.24 |
[baekjoon] 백준 14889번(파이썬): 스타트와 링크 (0) | 2022.06.22 |
[baekjoon] 백준 14499번(파이썬): 주사위 굴리기 (0) | 2022.06.21 |
[baekjoon] 백준 1197번(파이썬): 최소 스패닝 트리 (0) | 2022.06.20 |