[Algorithm] 백준 - 1647번 도시 분할 계획 (Swift)

2024. 6. 19. 13:50· → Problems
목차
  1. 문제 소개
  2. 문제 풀이

문제 소개

보자마자 최소 신장 트리 (MST, Minimum Spanning Tree) 문제구나! 왜냐하면 최소경로로 마을을 잇는 방법을 구하는 것이기 때문이다.
 

 

문제 풀이

Union find 알고리즘을 사용하여 최소 신장 트리를 만들었다. 그리고 마을을 두개로 나눈다고 했으니 최소 신장 트리에서 가장 긴 경로를 끊었다. 아래의 포스팅에 Union-Find 알고리즘을 활용하였다.

[Algorithm] Union-Find 알고리즘 (Swift)

Union-Find 알고리즘 이란?서로소 집합(Disjoint Set)을 효율적으로 관리하는 알고리즘이다. 아래의 두 그래프는 서로소인 집합이라고 볼 수 있다. 아래의 그래프가 주어진다면 1과 6은 같은 그룹에 속

swift-library.tistory.com

 

import Foundation

let nm = readLine()!.split(separator: " ").map { Int($0)! }
let (n, m) = (nm[0], nm[1])
var inputs = [[Int]]()

for _ in 0..<m {
    let abc = readLine()!.split(separator: " ").map { Int($0)! }
    let (a, b, c) = (abc[0], abc[1], abc[2])
    inputs.append([a, b, c])
}

var parents = Array(0...n)

func find(_ n: Int) -> Int {
    if parents[n] != n {
        parents[n] = find(parents[n])
    }
    return parents[n]
}

func union(_ a: Int, _ b: Int) {
    let a = find(a)
    let b = find(b)
    
    if a < b {
        parents[b] = a
    } else {
        parents[a] = b
    }
}

inputs.sort { $0[2] < $1[2] }

var answer = 0
var maxValue = 0

for input in inputs {
    if find(input[0]) != find(input[1]) {
        union(input[0], input[1])
        maxValue = max(maxValue, input[2])
        answer += input[2]
    }
}

print(answer - maxValue)

'→ Problems' 카테고리의 다른 글

[Algorithm] 백준 - 1806번 부분합 (Swift)  (0) 2024.06.21
[Algorithm] 백준 - 1005번 ACM Craft (Swift)  (0) 2024.06.20
[Algorithm] 백준 - 1197번 최소 스패닝 트리 (Swift)  (1) 2024.06.18
[Algorithm] 백준 - 27172번 수 나누기 게임 (Swift)  (1) 2024.06.18
[Algorithm] 백준 - 2467번 용액 (Swift)  (0) 2024.06.17
  1. 문제 소개
  2. 문제 풀이
'→ Problems' 카테고리의 다른 글
  • [Algorithm] 백준 - 1806번 부분합 (Swift)
  • [Algorithm] 백준 - 1005번 ACM Craft (Swift)
  • [Algorithm] 백준 - 1197번 최소 스패닝 트리 (Swift)
  • [Algorithm] 백준 - 27172번 수 나누기 게임 (Swift)
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Algorithm] 백준 - 1647번 도시 분할 계획 (Swift)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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