| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 0.25 초 (추가 시간 없음) | 128 MB | 249746 | 79380 | 63046 | 31.244% |
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
2 1 5
4
5 1 6
2
100 99 1000000000
999999901
이 문제는 두가지 방법으로 풀 수 있다.
1) while문과 if문 사용
2) math 라이브러리 사용
a와 남은 거리에 따라 2가지 경우의 수가 나온다.
1) a>=남은 거리: count += 1, break
2) a<=남은 거리: count += 1, 남은거리 -= (a-b)
이를 아래에서 구현해보자
a, b, v = map(int, input().split())
day = 0
if v<=a: print(1)
while v>0:
if v/a>1:
day += 1
v -= (a-b)
else:
day += 1
v -= a
print(day)
하지만 이 방법은 예제 1과 2에서만 가능하고, 예제 3같이 반복의 횟수가 증가하면 시간내에 풀리지 않는다.
결국 math 라이브러리를 사용하기로 한다.
점화식: A + X(A-B) >= v
이를 양변에 동일한 값을 넣어줘 변형한다.
(X+1)(A-B) >= V-B
X+1 >= (V-B)/(A-B)
import math
a, b, v = map(int, input().split())
print(math.ceil((v-b)/(a-b)))

역시 라이브러리가 최고야