출처
https://www.acmicpc.net/problem/2869
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
코드
import sys
import math
def solution(a, b, v):
days = math.ceil((v - b) / (a - b))
return days
#main
newLine = sys.stdin.readline
A, B, V = map(int, newLine().split())
result = solution(A, B, V)
print(result)
코드 설명
(a - b) + (a - b) + ... + (a - b) + a ≥ v 의 식을 만족하는 (a - b)의 최소 개수를 구해야한다. (a도 포함 해야한다. 반나절 걸린거도 하루로 쳐야하기 때문이다.)
(a - b) * days + b ≥ v
days ≥ (v - b) / (a - b)
days는 자연수이므로
days = ceiling((v - b) / (a - b))
알고리즘 분류
- 수학
테스트 케이스
▶ 입력
123 34 199999999
▶ 출력: 2247191