https://school.programmers.co.kr/learn/courses/30/lessons/43162#
문제 풀이: 서로 연결되어있는 컴퓨터의 네트워크 개수, 즉 집합이 몇개 있는지를 물어보는 문제. Union ford 알고리즘을 이용해 풀었다. 한가지 주의할 점은 마지막에 각 컴퓨터가 연결되어있는 부모가 어떤것인지 체크하는 작업을 해 주어야지 정확한 네트워크 개수가 나온다.
import Foundation
func solution(_ n:Int, _ computers:[[Int]]) -> Int {
var parents = Array(0..<n)
func getparent(_ num: Int) -> Int {
if parents[num] == num {
return num
}
return getparent(parents[num])
}
func unionParent(_ a: Int, _ b: Int) {
let aParent = getparent(a)
let bParent = getparent(b)
if aParent < bParent {
parents[bParent] = aParent
} else {
parents[aParent] = bParent
}
}
for i in 0..<n {
for j in 0..<n {
if i == j {
continue
}
if computers[i][j] == 1 {
unionParent(i, j)
}
}
}
var ansParents: [Int] = []
for i in 0..<n {
ansParents.append(getparent(i))
}
return Set(ansParents).count
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
Swift) 프로그래머스 가장 먼 노드 - Lv. 3 (1) | 2024.03.23 |
---|---|
Swift) 프로그래머스 단어 변환 - Lv. 3 (0) | 2024.03.22 |
Swift) 프로그래머스 멀리뛰기 - Lv. 2 (0) | 2024.03.22 |
Swift) 프로그래머스 - 이중우선순위큐 (0) | 2023.08.04 |
Swift) 프로그래머스 - 전력망을 둘로 나누기 - lv2 (0) | 2023.07.31 |