본문 바로가기

알고리즘/백준

[BOJ] [Python] 2869번 : 달팽이는 올라가고 싶다

시간 초과를 신경 써야 하는 문제이다. 

 

시간초과 예시

아래 코드처럼 구현하게 되면, 위 예시가 정말 오래 걸린다. (a와 b의 차이가 얼마 안 나기 때문이다.)

 

num = list(map(int, input().split()))

a = num[0]
b = num[1]
v = num[2]

count = 1
result = a

while(v > result):
    result -= b
    result += a
    count += 1

print(count)

 

 

위 코드를 식으로 표현하자면, a * n - b * (n - 1) >= v 이렇게 나온다.

정리하면, n >= (v - b) / (a - b) 

>= 를 처리하기 위해 math 모듈을 이용해 '올림' 처리 해주었다.

 

 

import  math

num = list(map(int, input().split()))

a = num[0]
b = num[1]
v = num[2]

print(math.ceil((v - b) / (a - b)))