#BOJ 2869 달팽이는 올라가고 싶다
#틀린 코드 -- 시간 초과
a, b, v = map(int, input().split())
day, up = 0, 0
while True:
day += 1
up += a
if up >= v:
break
up -= b
print(day)
위의 코드가 틀린 이유는 시간 초과 이다.
간단한 예제들을 넣으면 코드가 무리없이 돌아가지만 예제 입력 3과 같이 큰 값을 넣게 되면 while문과 for문이 너무 여러 번 돌아 시간이 오래 걸리기 때문이다.
💡 그렇다면 반복문 없이 코드를 짤 수 없을까? ➡️ 한 번에
day
를 구해보자!
import math
a, b, v = map(int, input().split())
day = (v - b) / (a - b)
print(math.ceil(day))
day = (v - b) / (a - b)
위 식에서 가장 중요한 부분은 분자의 v - b
이다.
만약 식을 day = v / (a - b)
라고 적는다면 문제의 정상에 올라간 후에는 미끄러지지 않는다는 조항이 적용되지 않는다. 따라서 올라가야할 거리(v
)에서 미끄러질 거리(b
)를 미리 뺀 후 그 값을 하루 동안 올라가는 거리(a - b
)로 나누어주면 올라가는데 걸리는 일수를 구할 수 있다.
단, 결과값이 4.5와 같이 소수로 나오는 경우, 5일이 걸리는 것과 같으므로 math.ceil()
함수를 이용하여 값을 올림해준다.