문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제
나의 첫 번째 풀이
A, B, V = map(int, input().split())
height = 0
day = True
day_cnt = 1
while height < V:
if day:
height += A
day = False
else:
height -= B
day = True
day_cnt += 1
print(day_cnt)
- for문으로 모든 단계를 계산하는 방법을 생각했지만 시간 초과로 실패했다.
나의 최종 풀이
import math
A, B, V = map(int, input().split())
day = (V-B)/(A-B)
print(math.ceil(day))
- 미끄러지는 높이를 제외한 `V-B`를 하루 동안 올라갈 수 있는 높이인 `A-B`로 나눈 몫을 구한다.
- 몫이 소수점으로 나올 경우 하루를 제대로 반영하기 위해 값을 올림 한다.
다른 사람의 풀이
A, B, V = map(int, input().split())
day = (V-B)/(A-B)
if day == int(day):
print(int(day))
else:
print(int(day) + 1)
- `math.ceil`을 사용하지 않고 if문으로 두 가지 경우로 나눠서 `int()` 내장 함수를 사용했다.