[Algorithm] Kruskal 알고리즘

2025. 2. 25. 16:58·ALGORITHM

Kruskal Algorithm 이란?

  • 가중치가 작은 간선부터 선택하면서, 사이클이 생기지 않도록 추가하는 방식
  • 알고리즘 과정
  1. 모든 간선을 가중치 기준으로 오름차순 정렬한다.
  2. 가중치가 가장 작은 간선부터 하나씩 선택한다.
  3. 유니온-파인드를 사용해 사이클이 생기는지 확인한다.
    • 만약 사이클이 생기지 않는다면, 해당 간선을 선택한다.
    • 만약 사이클이 생긴다면, 해당 간선을 버린다.
  4. N-1개의 간선이 선택될 때까지 반복한다. (MST의 성질)
import sys
input = sys.stdin.readline

# 유니온 파인드 (경로 압축 적용)
def find(parent, x):
    if parent[x] != x:
        parent[x] = find(parent, parent[x])
    return parent[x]

def union(parent, a, b):
    rootA = find(parent, a)
    rootB = find(parent, b)
    
    if rootA < rootB:
        parent[rootB] = rootA
    else:
        parent[rootA] = rootB

def kruskal():
    V, E = map(int, input().split())  # 노드 개수, 간선 개수
    edges = []
    parent = [i for i in range(V + 1)]  # 유니온 파인드용 부모 배열

    # 간선 정보 입력받기
    for _ in range(E):
        a, b, cost = map(int, input().split())
        edges.append((cost, a, b))  # (가중치, 노드1, 노드2) 순으로 저장

    edges.sort()  # 가중치 기준으로 정렬
    mst_weight = 0
    mst_edges = 0

    # 크루스칼 알고리즘 실행
    for cost, a, b in edges:
        if find(parent, a) != find(parent, b):  # 사이클이 아니라면 선택
            union(parent, a, b)
            mst_weight += cost
            mst_edges += 1
            if mst_edges == V - 1:  # MST가 완성되었으면 종료
                break

    print(mst_weight)  # 최소 비용 출력

kruskal()

 

'ALGORITHM' 카테고리의 다른 글

[Algorithm] 분할 정복  (0) 2025.02.11
[Dynamic Programming] 0-1 배낭 문제  (0) 2025.02.04
[Algorithm] 비트 마스킹  (1) 2025.01.16
'ALGORITHM' 카테고리의 다른 글
  • [Algorithm] 분할 정복
  • [Dynamic Programming] 0-1 배낭 문제
  • [Algorithm] 비트 마스킹
콘순이
콘순이
개발 보안 관련 스터디 기록장
  • 콘순이
    SECURITY DEVELOPER
    콘순이
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • BAEKJOON (45)
      • ALGORITHM (4)
      • QUALIFICATIONS (0)
      • PYTHON (1)
      • PROGRAMMERS (6)
      • DEVELOP (10)
        • SPRING (4)
        • ERROR (0)
        • CONCEPT (5)
        • AWS (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비트 마스킹
    solid
    Python
    비트 조작
    문자열
    알고리즘
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
콘순이
[Algorithm] Kruskal 알고리즘
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.