연결 그래프를 구한 뒤, 특정 노드에서 BFS를 돌리면서 방문한 노드를 전체 노드에서 하나씩 제거해 나간다. 모든 노드를 방문할 때까지 (시작 노드를 갱신하면서) 방문하자. 이때 BFS를 사용한 횟수가 곧 네트워크의 개수다.
import Foundation
func solution(_ n:Int, _ computers:[[Int]]) -> Int {
var nodes = Array(repeating: [Int](), count: n)
var checked = [Int]()
for i in 0..<n {
checked.append(i)
}
for i in 0..<n {
for j in i+1..<n {
if i == j {
continue
} else if computers[i][j] == 1 {
nodes[i].append(j)
nodes[j].append(i)
}
}
}
var total = 0
while !checked.isEmpty {
let startNode = checked.removeFirst()
var queue = [Int]()
queue.append(startNode)
var index = 0
while queue.count > index {
let curNode = queue[index]
for nextNode in nodes[curNode] {
if checked.contains(nextNode) {
queue.append(nextNode)
let checkedIdx = checked.firstIndex(of: nextNode)!
checked.remove(at: checkedIdx)
}
}
index += 1
}
total += 1
}
return total
}