백준

[SWIFT] 백준2869 달팽이는 올라가고싶다

화찌님 2022. 12. 23. 22:51


<타임아웃 난 코드>

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let a = input[0]
let b = input[1]
let v = input[2]
var day = 0
var lenth = 0

while true {
    
    if (lenth < v){
        day += 1
        lenth += a
        if(lenth < v){
            lenth -= b
        }
    }else{break}
}
print(day)

이 코드로 했을땐 작은 값은 잘 나오는 것을 확인할 수 있다. 하지만 숫자가 점점 커지기 시작하면 결과값을 찾는 시간이 길어지면서 타임아웃이 발생한다.

 

결국 이 문제의 솔루션은 수학식을 구하는 것이다.

v <= day(a-b)+b

이 식을 구했다면 문제는 해결된다.


<정답코드>

import Foundation

let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let a = input[0]
let b = input[1]
let v = input[2]
var day = (v-b)/(a-b)
if (((v-b)%(a-b)) != 0){
    day += 1
}
print(day)


<문제를 풀면서 배운점>

무작정 코드 작성을 하는것 보다 수학식을 세워서 활용하는것이 속도향상에 도움이 되구나 !

'백준' 카테고리의 다른 글

스위프트 백준 2292 벌집  (0) 2022.12.29
[SWIFT]백준1920 수찾기/이진탐색/시간복잡도  (1) 2022.12.29
[SWIFT]백준9012 괄호  (0) 2022.12.29
[SWIFT]백준10828 스택  (0) 2022.12.28
[SWIFT]2839 설탕배달  (0) 2022.12.27