[μ€μννΈ μκ³ λ¦¬μ¦] νλ‘κ·Έλλ¨Έμ€: κΈ°λ₯κ°λ°
λ¬Έμ
λ¬Έμ μ€λͺ
νλ‘κ·Έλλ¨Έμ€ νμμλ κΈ°λ₯ κ°μ μμ μ μν μ€μ λλ€. κ° κΈ°λ₯μ μ§λκ° 100%μΌ λ μλΉμ€μ λ°μν μ μμ΅λλ€.
λ, κ° κΈ°λ₯μ κ°λ°μλλ λͺ¨λ λ€λ₯΄κΈ° λλ¬Έμ λ€μ μλ κΈ°λ₯μ΄ μμ μλ κΈ°λ₯λ³΄λ€ λ¨Όμ κ°λ°λ μ μκ³ , μ΄λ λ€μ μλ κΈ°λ₯μ μμ μλ κΈ°λ₯μ΄ λ°°ν¬λ λ ν¨κ» λ°°ν¬λ©λλ€.
λ¨Όμ λ°°ν¬λμ΄μΌ νλ μμλλ‘ μμ μ μ§λκ° μ ν μ μ λ°°μ΄ progressesμ κ° μμ μ κ°λ° μλκ° μ ν μ μ λ°°μ΄ speedsκ° μ£Όμ΄μ§ λ κ° λ°°ν¬λ§λ€ λͺ κ°μ κΈ°λ₯μ΄ λ°°ν¬λλμ§λ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
μ ν μ¬ν
- μμ μ κ°μ(progresses, speedsλ°°μ΄μ κΈΈμ΄)λ 100κ° μ΄νμ λλ€.
- μμ μ§λλ 100 λ―Έλ§μ μμ°μμ λλ€.
- μμ μλλ 100 μ΄νμ μμ°μμ λλ€.
- λ°°ν¬λ ν루μ ν λ²λ§ ν μ μμΌλ©°, ν루μ λμ μ΄λ£¨μ΄μ§λ€κ³ κ°μ ν©λλ€. μλ₯Ό λ€μ΄ μ§λμ¨μ΄ 95%μΈ μμ μ κ°λ° μλκ° ν루μ 4%λΌλ©΄ λ°°ν¬λ 2μΌ λ€μ μ΄λ£¨μ΄μ§λλ€.
νμ΄
ꡬν λ¬Έμ μ λλ€. μμ μ νλμ© κΊΌλ΄κ°λ©΄μ ν΄λΉ μμ μ΄ μμ ν λλλ μκ° λ΄μ κ°μ΄ λλλ μμ λ€μ λͺ©λ‘μμ λΉΌμ€λλ€.
μ½λ
import Foundation
func finishJob (_ progresses : inout [Int], _ speeds: inout [Int]) -> Int{
progresses.removeFirst()
speeds.removeFirst()
return 1
}
func calcDaysLeft (_ progresses : inout [Int], _ speeds: inout [Int]) -> Int {
let funcNow = progresses.first!
let timeLeft = 100 - funcNow
return Int(ceil(Double(timeLeft) / Double(speeds.first!)))
}
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var progs = progresses
var spds = speeds
var answer : [Int] = []
while(!progs.isEmpty) {
var finishCount = 0
let currFuncDaysLeft = calcDaysLeft(&progs, &spds)
finishCount += finishJob(&progs, &spds)
for _ in 0..<progs.count {
let nextFuncDaysLeft = calcDaysLeft(&progs, &spds)
if (currFuncDaysLeft >= nextFuncDaysLeft) {
finishCount += finishJob(&progs, &spds)
}
}
answer.append(finishCount)
}
return answer
}