[백준 10775] 공항

Junyoung Park·2022년 5월 9일
0

코딩테스트

목록 보기
411/631
post-thumbnail

1. 문제 설명

공항

2. 문제 분석

이전에 파이썬으로 find 함수를 응용해 풀었던 문제다. find를 풀기 전에 visited 체크로 풀어보기도 했는데, 스위프트에서도 아니나 다를까 70% 정도에서 시간초과가 났다.

3. 나의 풀이

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]
    }
}
profile
JUST DO IT

0개의 댓글