코드
import Foundation
func solution(_ n:Int, _ wires:[[Int]]) -> Int {
var route = [Int:[Int]]()
for wire in wires {
if route[wire[0]] != nil {
route[wire[0]]?.append(wire[1])
} else {
route[wire[0]] = [wire[1]]
}
if route[wire[1]] != nil {
route[wire[1]]?.append(wire[0])
} else {
route[wire[1]] = [wire[0]]
}
}
var result = n
for i in route {
for j in i.value {
route[i.key] = route[i.key]!.filter{$0 != j}
route[j] = route[j]!.filter{$0 != i.key}
let a = abs(bfs(route, i.key).count - bfs(route, j).count)
result = a < result ? a : result
route[i.key]?.append(j)
route[j]?.append(i.key)
}
}
return result
}
func bfs (_ route: [Int:[Int]], _ node: Int) -> [Int] {
var visited = [Int]()
var needVisit = [Int]()
needVisit.append(node)
while !needVisit.isEmpty {
let now = needVisit.removeFirst()
if visited.contains(now) {
continue
}
visited.append(now)
needVisit.append(contentsOf: route[now] ?? [])
}
return visited
}
회고
- 2단계치고 어렵다고 느껴졌다..
- 이런 노드들이 나오면 이해가 잘 되지 않아 풀지 못하는 것 같다
- 이런 유형의 문제가 나오면 이번 문제를 잘 떠올려야겠다