2021. 6. 7. 18:47γπ§π»π» iOS κ°λ°/Swift - Algorithm - Solutions
π΅π» λ¬Έμ ν΄μ
nκ°μ μ¬ μ¬μ΄μ λ€λ¦¬λ₯Ό 건μ€νλ λΉμ©(costs)μ΄ μ£Όμ΄μ§ λ, μ΅μμ λΉμ©μΌλ‘ λͺ¨λ μ¬μ΄ μλ‘ ν΅ν κ°λ₯νλλ‘ λ§λ€ λ νμν μ΅μ λΉμ©μ return νλλ‘ solutionμ μμ±νμΈμ.
μ νμ¬ν
- μ¬μ κ°μ nμ 1 μ΄μ 100 μ΄νμ λλ€.
- costsμ κΈΈμ΄λ ((n-1) * n) / 2 μ΄νμ λλ€.
- μμμ iμ λν΄, costs[i][0] μ costs[i] [1]μλ λ€λ¦¬κ° μ°κ²°λλ λ μ¬μ λ²νΈκ° λ€μ΄μκ³ , costs[i] [2]μλ μ΄ λ μ¬μ μ°κ²°νλ λ€λ¦¬λ₯Ό 건μ€ν λ λλ λΉμ©μ λλ€.
- κ°μ μ°κ²°μ λ λ² μ£Όμ΄μ§μ§ μμ΅λλ€. λν μμκ° λ°λλλΌλ κ°μ μ°κ²°λ‘ λ΄ λλ€.
- λͺ¨λ μ¬ μ¬μ΄μ λ€λ¦¬ κ±΄μ€ λΉμ©μ΄ μ£Όμ΄μ§μ§ μμ΅λλ€. μ΄ κ²½μ°, λ μ¬ μ¬μ΄μ 건μ€μ΄ λΆκ°λ₯ν κ²μΌλ‘ λ΄ λλ€.
- μ°κ²°ν μ μλ μ¬μ μ£Όμ΄μ§μ§ μμ΅λλ€.
π€ νμ΄ κ³Όμ
μ¬κ³Ό μ¬μ μ°κ²°νλ λ€λ¦¬λ₯Ό λμ λͺ¨λ μ¬μ΄ μ΅μ λΉμ©μΌλ‘ μ°κ²°λ μ μλλ‘ νλ λ¬Έμ μ λλ€. μ¦, MST(Minimum Spanning Tree) λ¬Έμ μΈλ°μ. κ·Έλν μ΄λ‘ μμ Spannig Treeλ λͺ¨λ λ Έλλ₯Ό μ°κ²°νλ λΆλΆ κ·ΈλνλΌκ³ ννν©λλ€. μ΄λ¬ν κ·Έλν μ€ μ΅μ λΉμ©μΌλ‘ λͺ¨λ λ Έλλ₯Ό μ°κ²°ν λΆλΆ κ·Έλνλ₯Ό MSTλΌκ³ λΆλ¦ λλ€. μ΄ MSTλ νλ¦Ό μκ³ λ¦¬μ¦μ΄λ ν¬λ£¨μ€μΉΌ μκ³ λ¦¬μ¦μ ν΅ν΄ λ€ν μκ° μμ μ°Ύμ μ μμ΅λλ€.
μ λ νλ¦Ό μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν΄λ³΄μμ΅λλ€. κ·Έλνλ μΈμ νλ ¬ ννλ‘ κ΅¬ννκ³ 0λ²μ§Έ μ¬μ μμμ μΌλ‘ μ΅μ νμ μΈμ ν μ¬λ€κ³Ό λΉμ©μ ννλ‘ λ¬Άμ΄ λ£μ΄μ£Όμμ΅λλ€. μ΅μ λΉμ© κ°μ μΌλ‘ ν¬ν¨λ μ¬λ€μ λ°λ‘ μ§ν©μ μ΄μ©νμ§ μκ³ tree λ°°μ΄μ ν΅ν΄ 체ν¬ν΄μ£Όμμ΅λλ€. μ΅μ νμ κ²½μ° λ°λ‘ ꡬννμ§ μκ³ λ°°μ΄μ μ΄μ©νμ¬ λ§€λ² μ λ ¬ν΄μ£Όλ λ°©μμΌλ‘ ν΄κ²°νμμ΅λλ€.
νλ¦Ό μκ³ λ¦¬μ¦κ³Ό ν¬λ£¨μ€μΉΌμκ³ λ¦¬μ¦μ λ°λ‘ μ 리νμ¬ μκ³ λ¦¬μ¦ ν¬μ€ν μΌλ‘ μ¬λ €λ³΄λλ‘ νκ² μ΅λλ€. π
π¦ λ¬Έμ νμ΄ & μ½λ
import Foundation
func solution(_ n:Int, _ costs:[[Int]]) -> Int {
var graph = [[Int]](repeating: [Int](repeating: 0, count: n), count: n)
var tree = [Bool](repeating: false, count: n)
var mstCost = 0
// μ΅μνμν λ°°μ΄
var pq: [(cost: Int, idx: Int)] = []
for info in costs {
let from = info[0]
let to = info[1]
let cost = info[2]
graph[from][to] = cost
graph[to][from] = cost
}
// 0λ²μ§Έ μ¬μ μμμ μΌλ‘ νκ³ νΈλ¦¬μ λ£μ΄μ€ λ€
// μ΅μνμ μΈμ ν μ¬μ μ°κ²°λΉμ©κ³Ό μ¬μ μΈλ±μ€λ₯Ό λ£μ΄μ€λ€.
tree[0] = true
for idx in 0..<n {
if graph[0][idx] != 0 {
pq.append((graph[0][idx], idx))
}
}
while !pq.isEmpty {
// λΉμ©μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬
pq.sort{$0.cost < $1.cost}
let cur = pq.first!.idx
let curCost = pq.first!.cost
pq.removeFirst()
// treeμ ν¬ν¨λμ΄μμ§ μλ€λ©΄ μΆκ°νκ³ μ΅μνμ μΈμ ν μ¬λ€μ λ£μ΄μ€λ€.
if tree[cur] == false {
tree[cur] = true
// μ΅μ λΉμ© μΆκ°
mstCost += curCost
for idx in 0..<n {
if tree[idx] == false && graph[cur][idx] != 0 {
pq.append((graph[cur][idx], idx))
}
}
}
}
return mstCost
}
- λ¬Έμ λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/42861
ππ» μ°Έκ³
'π§π»βπ» iOS κ°λ° > Swift - Algorithm - Solutions' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift - νλ‘κ·Έλλ¨Έμ€] μμ (0) | 2021.06.10 |
---|---|
[Swift - νλ‘κ·Έλλ¨Έμ€] λΆλ μ¬μ©μ (0) | 2021.06.09 |
[Swift - νλ‘κ·Έλλ¨Έμ€] μλ¬Όμ μ μ΄μ (0) | 2021.06.03 |
[Swift - νλ‘κ·Έλλ¨Έμ€] λ€λ¨κ³ μΉ«μ ν맀 (0) | 2021.06.02 |
[Swift - νλ‘κ·Έλλ¨Έμ€] ν©μΉ νμ μκΈ (0) | 2021.06.01 |