https://www.acmicpc.net/problem/2869
땅 위에 달팽이가 있다. 이 달팽이는 높이가 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
문제를 풀기 앞서 시간제한이 0.15초이다. 반복문을 사용하면 시간복잡도가 선형으로 풀어지기 때문에 O(N) 이나와서 반복문을 사용하여 풀면 시간 초과 판정
v = (a - b) * n(일수) + a 인데 마지막일수는 잠을 안자고 올라가기때문에 b값을 빼면 안된다. 이 점을 유의하고 풀어보도록 하자.
거/속*시 공식에 따라
(a-b) = 하루 이동속도 라고 생각하고
v-a-b/a-b 가 도착 전날 값이 된다.
하루 이동거리가 a이니 거리값에 a 를 더해주며 +1을 해주면
(v-b)/(a-b) 가 날짜가 된다 날짜는 소수가 될수없으니
int(k) 와 k 가 같을때는 정수라는 의미로 그대로 출력하면 되고
같지않다면 소숫점이있으니 올림대신 +1을 해준다.
두번째 풀이는 math 라이브러리 사용한 방법이다.
ceil은 소수점을 올림/ floor는 소수점을 내림 / round는 반올림
날짜에는 소수점이 없기때문에 올림인 ceil 을 사용해서 정수로 만들어준다. v = (a-b) * n + a 공식에 따라 v-a만큼의 거리를 구하고 마지막에 1을 더해주면 값을 구할수있다.