본문 바로가기

코딩 연습

[백준 2869] 달팽이는 올라가고 싶다 / 파이썬

시간제한 : 0.15초 

메모리제한 : 128MB

문제 :

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

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

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

입력 : 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력 : 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


풀이

달팽이가 하루에 Am를 올라갔다가 Bm를 떨어진다. 만약, 달팽이가 Am를 올라가는 동안 목표 높이에 도달한다면 달팽이의 이동이 종료된다. 

 

이에 기반하여 달팽이가 Vm의 나무 막대 꼭대기에 도달하는 데에 소요되는 시간 day일 사이의 관계는 다음과 같이 표현할 수 있다:

1) (A-B)*day + A >= V

이를 x를 기준으로 정리하면 

2) day > (V-A) /(A-B)

가 된다.

 

이때 day는 항상 정수여야 된다. 

만약 달팽이가 낮 동안에 꼭대기에 도착했다면, day는 (V-A)/(A-B)의 몫과 같다.

 

그러나 (V-A)/(A-B)의 값이 정수가 아니라면 

day > 정수 + 0.xx로 표현되므로, day에 1을 추가해주어야 한다.

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

day = (V-B)//(A-B)

if (V-B) % (A-B) != 0:
    day += 1

print(day)