연결 그래프를 만든 뒤,
부모-자식
,자식-노드
으로 연결되는 노드의 개수가 주어진 노드의 개수와 동일하다면 (자신을 제외하고) 다른 모든 그래프와 비교, 순위를 얻어낼 수 있다는 뜻이다.
import Foundation
func solution(_ n:Int, _ results:[[Int]]) -> Int {
var nodes = Array(repeating: [Int](), count: n+1)
var nodesReverse = Array(repeating: [Int](), count: n+1)
for result in results {
let (parent, child) = (result[0], result[1])
nodes[parent].append(child)
nodesReverse[child].append(parent)
}
var nodesCnt = Array(repeating: 0, count: n+1)
for idx in 1..<n+1 {
var queue = [Int]()
var visited = Array(repeating: false, count: n+1)
queue.append(idx)
visited[idx] = true
var index = 0
var total = 0
while queue.count > index {
let curNode = queue[index]
for nextNode in nodes[curNode] {
if !visited[nextNode] {
visited[nextNode] = true
queue.append(nextNode)
total += 1
}
}
index += 1
}
queue = [idx]
visited = Array(repeating: false, count: n+1)
visited[idx] = true
index = 0
while queue.count > index {
let curNode = queue[index]
for nextNode in nodesReverse[curNode] {
if !visited[nextNode] {
visited[nextNode] = true
queue.append(nextNode)
total += 1
}
}
index += 1
}
nodesCnt[idx] = total + 1
}
let answer = nodesCnt.filter{$0 == n}.count
return answer
}