반응형
250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 코딩교육
- pytorch
- 유니온 파인드
- 싸피 7기 입학식
- SSAFY 8기
- DP
- 프로그래머스 고득점 kit
- SSAFY 입학식
- 백준7576 bfs
- DenseNet
- ssafy 7기 합격
- bfs
- ssafy 7기
- dfs
- 백준
- SSAFYcial
- 삼성 청년 SW 아카데미
- SSAFY
- 삼성청년sw아카데미
- 이코테
- git
- React
- 프로그래머스
- 웹 표준 사이트 만들기
- SWEA
- Learning
- ssafy 7기 교수님
- 전이학습
- 알고리즘
- 코딩 교육
Archives
- Today
- Total
개미의 개열시미 프로그래밍
[알고리즘] 백준1197 최소 스패닝 트리 - 파이썬 본문
728x90
반응형
https://www.acmicpc.net/problem/1197
[풀이 코드]
from sys import stdin
input = stdin.readline
v, e = map(int, input().split())
parent = [i for i in range(v+1)]
array = []
result = 0
def find_parent(parent, x):
if parent[x] != x:
parent[x] = find_parent(parent, parent[x])
return parent[x]
def union_parent(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(e):
a, b, cost = map(int, input().split())
array.append((cost, a, b))
array.sort()
for edge in array:
cost, a, b = edge
if find_parent(parent, a) != find_parent(parent, b):
union_parent(parent, a, b)
result += cost
print(result)
- 가장 대표적인 최소 신장 트리 알고리즘인 크루스칼 알고리즘을 이코 테에서 배웠던 내용을 코드로 옮기면 되는 문제였다.
[최소 신장 트리 개념]
그래프에서 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미합니다.
- 모든 노드가 포함되어 서로 연결되면서 사이클이 존재하지 않는다는 조건은 트리의 조건이기도 합니다.
가장 대표적인 최소 신장 트리 알고리즘 ===> 크루스칼 알고리즘
- 그리디 알고리즘으로 분류됩니다.
- 구체적인 동작 과정은 다음과 같습니다.
1. 간선 데이터를 비용에 따라 오름차순으로 정렬합니다.
2. 간선을 하나씩 확인하며 현재의 간선이 사이클을 발생시키는지 확인합니다.
1) 사이클이 발생하지 않는 경우 최소 신장 트리에 포함시킵니다.
2) 사이클이 발생하는 경우 최소 신장 트리에 포함시키지 않습니다.
3. 모든 간선에 대하여 2번의 과정을 반복합니다.
성능 분석
- 크루스칼 알고리즘은 간선의 개수가 E개 일때, O(ElogE)의 시간 복잡도를 가집니다.
- 크루스칼 알고리즘에서 가장 많은 시간을 요구하는 곳은 간선을 정렬을 수행하는 부분입니다.
- 표준 라이브러리를 이용해 E개의 데이터를 정렬하기 위한 시간 복잡도는 O(ElogE)입니다.
728x90
반응형
'알고리즘 > 유니온 파인드, 최소 신장 트리(크루스칼)' 카테고리의 다른 글
[프로그래머스] LEVEL3 네트워크 (유니온파인드 풀이) - 파이썬 (1) | 2021.12.12 |
---|---|
[알고리즘] 백준2252 줄 세우기 - 파이썬 (0) | 2021.09.13 |
[알고리즘] 백준20040 사이클 게임 - 파이썬 (0) | 2021.09.10 |
[알고리즘] 백준4195 친구 네트워크 - 파이썬 (0) | 2021.09.09 |
[알고리즘] 백준1976 여행가자 - 파이썬 (3) | 2021.09.08 |
Comments