a, b, v가 차례로 주어진다.
구하는 값: 달팽이가 총 v를 올라가는데 걸리는 일 수
달팽이는 낮에 a만큼을 올라가고 밤에 자면서 b만큼을 미끄러진다.
그렇다면 달팽이는 하루가 갈 때 a를 올라간 후에 b만큼 뒤로가니까, 결국 a-b만큼을 올라간다고 볼 수 있다.
a-b을 편의상 step(달팽이의 발걸음)이라고 하자.
단, 변수가 되는 것은 만약 남은 높이가 a보다 작거나 같은경우, 한번에 a만큼을 올라가기 때문에 이 때는 step만큼이 아니라 a만큼을 올라가게 된다.
이를 고려해서 식을 세워보았다.
step = a-b, x=일 수, oneday_m=하루면 올라갈 만큼의 길이(m)
step만큼 x일을 올라갔을 때, oneday_m보다 같거나 더 올라간 상태라면, 이후 딱 하루만 더 올라간다면 정상에 도착할 것이다.(정상에 도달할 때까지의 일 수만 구하면 되기 때문에, 정상보다 더 올라가는 건 고려할 필요가 없다.) - 문제에 b<a라고 했기에 a-b는 0이 아니다.
이를 다음과 같이 코드로 구현하였다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String[] s = rd.readLine().split(" ");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
int v = Integer.parseInt(s[2]);
int x = (int)(Math.ceil((v-a) / (double)(a-b))); // 올림한 후에 int로 casting 해준다
System.out.println(x+1); //구해진 x(일 수)에 +1일만 더 올라가면 정상에 도달한다..!
}
}
step*x가 정수이기 때문에, double 값에 올림을 해주어서 크거나 같은 최소 정수를 구해준다.
그 이후에 +1을 하여 출력하면, 정상에 도달하는데까지 걸린 일 수를 구할 수 있다.