백준 문제풀이/수학(Math)

백준 온라인 저지 - 달팽이는 올라가고 싶다(#2869) 파이썬

Itscool 2021. 7. 30. 13:10

문제설명

이 문제의 핵심은 시간제한입니다. while문을 돌리면 간단하게 구현할 수 있지만 (1 ≤ B < A ≤ V ≤ 1,000,000,000) 라는 큰 수가 입력값으로 주어지기 때문에 while문을 사용하면 시간초과가 뜹니다. 그렇다면 두 가지의 경우로 나누어 풀면 됩니다. 먼저 달팽이가 꼭대기에 올라가기까지의 일수를 담을 변수 n을 설정합니다. 이 n이 정수일 경우는 달팽이가 하루에 올라갈 수 있는 할당량을 모두 채우며 꼭대기에 도달하는 경우입니다. 이 경우는 nA + (n-1)B = V, 즉 n = (V-B)/(A-B)이 성립한다면 n을 출력하고, 그 외의 경우, 즉 달팽이가 할당량을 모두 채우지 않은 채로 꼭대기에 도달하는 경우, n이 소수점을 가지게 되죠. 이 경우에는 n+1을 출력하면 됩니다. 단, A-B가 0이 되는 경우, ZeroDivisionError를 방지하기 위해서 try-except문을 활용하였습니다. 

달팽이는 올라가고 싶다(#2869) 파이썬 코드  

a, b, v = map(int, input().split())
while True:
  try:
    n = (v-b)/(a-b)
    if n == int(n):
      print(int(n))
    else:
      print(int(n)+1)
    break
  except ZeroDivisionError:
    break