본문 바로가기

개발/algorithm

[백준 2869번] 달팽이는 나무에 올라가고 싶다 - python

문제 링크

풀이 

- 처음엔 while문을 사용해서 정상에 도달할 때까지 반복해주었더니 시간초과가 발생하였다. 

# 시간초과
import sys
input = sys.stdin.readline 

a, b ,v = map(int,input().split())

w = 0
cnt = 0 
while True:
  w += a 
  cnt += 1 
  if w >= v:
    break
  else:
    w -= b

print(cnt)

-a는 낮에 올라갈 수 있는 높이고 b는 밤에 미끄러지는 높이라고 하면 

나무의 높이 v = (a-b)* n + a 이다. 

a만큼 올라가고 b만큼 떨어지는 것을 n일동안 반복한 후 a만큼 올라가서 정상에 도착하면 미끄러지지 않기 때문이다. 

따라서 올라가는 데 걸리는 시간은 n+1일이다. 

n + 1 = (v-a) / (a-b) 

이 때 정확하게 나무의 높이만큼 올라가는 것이 아니기 때문에 나누어 떨어지지 않을 수 있는데,

소수점일 경우 하루가 더 걸린 것과 같으므로 올림을 사용한다. 

import math

a, b ,v = map(int,input().split())

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