1의 근접 노드는 2,3
2의 근접 노드는 1,4,5
3의 근접 노드는 1,4,6
4의 근접 노드는 2,3
5의 근접 노드는 2
6의 근접 노드는 3
var nearNode: [[Int]] = []
nearNode = Array(repeating: [], count: n+1)
edge.forEach{
nearNode[$0[0]].append($0[1])
nearNode[$0[1]].append($0[0])}
방문한 노드를 체크해야되는 이유는
var visited: [Bool] = []
visited = Array(repeating: false, count: n+1)
이런식으로 진행하다보면 제일 깊이 있는 노드의 갯수를 구할 수 있다.
var result: [Set<Int>] = [[1]]
var depth = 1
visited[1] = true
while result.last!.count > 0{
result.append([])
for node in result[result.count - 2]{
bfs(node, depth)
}
depth += 1
}
func bfs(_ s: Int,_ depth: Int){
nearNode[s].forEach{
if !visited[$0]{
visited[$0] = true
result[depth].insert($0)
}
}
}
import Foundation
var nearNode: [[Int]] = []
var visited: [Bool] = []
var result: [Set<Int>] = [[1]]
func solution(_ n:Int, _ edge:[[Int]]) -> Int {
nearNode = Array(repeating: [], count: n+1)
visited = Array(repeating: false, count: n+1)
edge.forEach{
nearNode[$0[0]].append($0[1])
nearNode[$0[1]].append($0[0])}
var depth = 1
visited[1] = true
while result.last!.count > 0{
result.append([])
for node in result[result.count - 2]{
bfs(node, depth)
}
depth += 1
}
result.removeLast()
return result.last?.count ?? 0
}
func bfs(_ s: Int,_ depth: Int){
nearNode[s].forEach{
if !visited[$0]{
visited[$0] = true
result[depth].insert($0)
}
}
}
2시간 고민하다 풀이 참고하고 다시 풀어보았다. 뭔가 풀릴것 같으면서도 시간초과로 절대 안풀리는 문제 .. 😭