문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
예제 입력 1
2 1 5
예제 출력 1
4
예제 입력 2
5 1 6
예제 출력 2
2
예제 입력 3
100 99 1000000000
예제 출력 3
999999901
정답
이 문제는 얼핏보면 굉장히 쉬워보인다.
A, B, V = map(int,input().split())
tree = 0
count = 0
while tree < V:
tree += A
if A >= V:
count += 1
break
tree -= B
count += 1
print(count)
위 코드와 같이 달팽이가 올라간 높이와 내려간 높이를 반복문으로 표시하면 해결할 수 있을것같으나 해당 문제에는 0.25초라는 시간 제한이 있어 위와 같은 코드로 실행할 시 오답으로 판정이 난다.
해당 문제를 해결하기 위해 공식을 새워보면
day = x
A(x) - B(x-1) = V
라는 공식이 세워짐을 알 수 있다.
해당 공식을 풀어 코드에 적용시키면 정답을 도출할 수 있다.
import math
A, B, V = map(int,input().split())
x = (V-B)/(A-B)
print(math.ceil(x))
# 실수가 출력될 시 소수점의 유무는 곧 하루를 초과하였음을 뜻하기 때문에
# 올림하여 계산한다.
'코딩딩 > BOJ' 카테고리의 다른 글
[백준 5086번] 문제풀이 (0) | 2023.05.13 |
---|---|
[백준 10757번] 문제풀이 (0) | 2023.05.13 |
[백준 1193번] 문제풀이 (0) | 2023.05.10 |
[백준 2292번] 문제풀이 (0) | 2023.05.09 |
[백준 2903번] 문제풀이 (0) | 2023.05.08 |