유니온 파인드의
find
함수를 응용한다. 딕셔너리를 통해 해당 번호의 방에 접근 가능한지 체크, 그렇지 않다면 가능할 때까지 체크한다.
import Foundation
func solution(_ k:Int64, _ room_number:[Int64]) -> [Int64] {
var result = [Int64]()
var rooms = [Int64:Int64]()
func find(node: Int64) -> Int64 {
guard let value = rooms[node] else {
rooms[node] = node + 1
return node
}
let room = find(node: value)
rooms[node] = room + 1
return room
}
for requested in room_number {
let room = find(node: requested)
result.append(room)
}
return result
}