이전에 파이썬으로 find 함수를 응용해 풀었던 문제다. find를 풀기 전에 visited 체크로 풀어보기도 했는데, 스위프트에서도 아니나 다를까 70% 정도에서 시간초과가 났다.
import Foundation
let G = Int(readLine()!)!
let P = Int(readLine()!)!
var parents = [Int]()
for i in 0..<G+1{
parents.append(i)
// i번 게이트로 들어오는 비행기는 1..i번 게이트 중 도킹 가능 (총 i번)
}
var gates = [Int]()
for _ in 0..<P{
let g = Int(readLine()!)!
gates.append(g)
}
var total = 0
for gate in gates{
let root = find(node: gate)
if root == 0{
// 도킹 가능한 게이트가 더 이상 없다는 뜻.
break
}
parents[root] -= 1
// paretns[root]는 이 비행기가 도킹 가능한 게이트의 개수
total += 1
}
print(total)
func find(node:Int)->Int{
if parents[node] == node{
return node
} else{
parents[node] = find(node:parents[node])
return parents[node]
}
}