제목 : 달팽이는 올라가고 싶다
- 문제 : 땅 위에 달팽이가 있다. 이 달팽이는 높이가 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)
달팽이가 우물 올라가는 문제는 내가 초등학교였나? 중학교 때 처음 접했던 것 같은데, 그 때도 마찬가지로 도착하면 굳이 미끄러질 이유가 없다는 것 간과하여 틀렸던 것이 기억난다.