99Club
Posts

© 2025. woongsnote All rights reserved.

Beginner
2024-05-04

달팽이는 올라가고 싶다

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 함수 구현하기

#99일지#99클럽#TIL#개발자스터디#코딩테스트#항해
직접 풀러가기

문제 설명

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

제한 사항

  • 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다.
  • 1 ≤ B < A ≤ V ≤ 1,000,000,000
  • 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
입력출력
2 1 54
5 1 62
100 99 1000000000999999901

풀이

달팽이가 V미터 정상에 도달하기 위해서는, 마지막 날에 정상에 도달하게 되는데, 이 날은 밤에 미끄러질 필요가 없다. 따라서, 달팽이가 나무 막대를 올라가는 전략은 매일 A미터 올라가고, B미터 미끄러지는 패턴을 반복한 다음, 마지막 날에 A미터 올라가서 정상에 도달하는 것이다.

달팽이가 마지막 날을 제외하고 실제로 얼마나 많은 일수가 필요한지를 계산하기 위해서는 다음과 같은 계산이 필요하다.

  1. 마지막 날을 제외하고 달팽이가 올라가야 할 높이는 V−A (마지막 날에 A 미터 올라갈 것이므로) 𝑉−𝐴
  2. 달팽이는 하루에 A−B 미터만큼 실제로 높이를 유지한다. 𝐴−𝐵
  3. 이를 이용하여 달팽이가 필요한 일수를 계산할 수 있다. days=[A−B/V−A]+1
import math

A, B, V = map(int, input().split())

height_needed = V - A

net_gain_per_day = A - B

days = math.ceil(height_needed / net_gain_per_day) + 1
    
print(days)