Python
# 2869번: 달팽이는 올라가고 싶다.
# 문제: 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
# 입력: 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
#출력: 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
a, b, v = map(int, input().split(" "))
day = 0
up = v - a # 마지막 날 제외
day_up = a - b # 하루에 올라가는 길이
if up % day_up == 0:
day = up // day_up + 1 # 1: 마지막 날
else:
day = up // day_up + 2 # 2: 마지막날 + 나머지 길이올라가는 날
print(day)
문제 예제들을 보고 숨겨진 규칙성이 있다는 것을 파악하고 메모장으로 규칙성을 알아냈다.
이 문제는 도착하는 시점과 낮에는 올라가고 밤에는 내려가는 성질을 잘 파고들어야 한다.
내가 접근한 방식은 도착하는 마지막 날은 어차피 일수를 +1만 해주면 되기 때문에 그것을 제외하려고 했다.
그 전까지는 하루에 올라갈 수 있는 길이가 일정하다. (낮에 올라가는 길이 - 밤에 내려가는 길이)
마지막 날을 제외하고 올라가야하는 길이를 구하고 그 길이에 하루동안 올라갈 수 있는 길이로 몫나누기를 하면 대략적인 일 수가 구해진다. 거기에 마지막 날(+1) or 나머지가 0이 아니면 하루 더 추가니까(+1)
따라서 나머지가 0이냐 아니냐로 조건문을 세워서 풀어주면 된다.