728x90
<2869>
문제:
달팽이는 올라가고 싶다
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
첫번째 줄에 세 정수 A,B,V를 공백으로 구분하여 입력하고, 달팽이가 나무 막대를 올라가는데 며칠이 걸리는지 출력하자.
풀이1(시간초과)
A, B, V = map(int, input().split())
D = 0 #걸린 일수
H = 0 #달팽이가 올라간 높이
while(True):
H += A
D += 1
if H >= V: break
H -= B
print(D)
처음에는 위와 같이 while문을 이용하여 코드를 작성하였는데, 시간 초과가 발생했다..
시간 초과를 범하지 않기 위해서는 while문을 사용하지 않고 코드를 작성해야겠다는 생각이 들었다.
문제에서 중요한 포인트는 달팽이가 정상에 도달한 후에는 미끄러지지 않는다는 것이다.
잘 생각해보면 달팽이는 결국 마지막 날에 B미터는 무조건 미끄러지지 않는다.
따라서 V를 V-B로 두고 생각하였다.
(V-B)/(A-B) 를 올림하여서 걸리는 일수 Day를 출력하였다.
새로 수정한 코드는 아래와 같다.
풀이2
import math
A, B, V = map(int, input().split())
Day = math.ceil((V-B)/(A-B))
print(Day)
입력:
2 1 5
출력:
4
![](https://blog.kakaocdn.net/dn/0EfBw/btrs593X9Xz/DKlxKsBCgFFU1sYobvkwnK/img.png)
while문을 사용하면 어렵지 않게 해결할 수 있는 문제지만, 시간 초과를 해결하는 것이 관건인 문제였던 것 같다.
728x90