2869) 달팽이는 올라가고 싶다

 

2869

제목 : 달팽이는 올라가고 싶다

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

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

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

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

어려운 문제는 아니지만 마지막 문장을 유의해야한다. “정상에 올라간 후에는 미끄러지지 않는다”

예제 1번을 보자. 5m 막대를 낮에 +2m/ 밤에 -1m 움직인다. 1일 부터 3일 까지는 낮밤을 반복하며 총 3m를 이동한다((+2-1)*3).

단순히 하루에 1m씩 올라간다고 생각하면 5일이 걸리겠지만, 4일 낮에 이미 기존 3m에 2m를 추가로 오르면서 정상에 도착하기 때문에 더 이상 미끄러지지 않는다. 결과적으로 답은 4일이 된다.

즉 (a-b)로 단순히 v를 나눌게 아니라, 나눴을 때 나머지를 고려하여 접근하여야 한다.

코드는 다음과 같다.

import sys
a, b, v = map(int, sys.stdin.readline().split())


if v==a:
    day = 1
else:
    d1 = (v-a)//(a-b)
    d2 = (v-a)%(a-b)
    if d2==0:
        day = d1+1
    else:
        day = d1+2

print(day)

달팽이가 우물 올라가는 문제는 내가 초등학교였나? 중학교 때 처음 접했던 것 같은데, 그 때도 마찬가지로 도착하면 굳이 미끄러질 이유가 없다는 것 간과하여 틀렸던 것이 기억난다.