정답율이 낮길래 엄청 어려운 문제인가 생각 했는데 그건 아니였습니다.
그러나 처음에는 반복문으로 풀어 시간 초과가 났었고
두번째로는 정상에 도달하면 미끄러지지 않는다는 조건을 해결하지 못해서 틀렸던거 같습니다.
이렇게 생각하면 간단했습니다.
변수 a b c
예제 (2 1 5) 를 기준으로 해서 설명해보겠습니다.
첫날 올라갈 수 있는 높이가 2m
만약 2 1 2 라면 무조건 첫날 도착하는 것이겠죠?
a>=c이면 무조건 1을 출력해줍니다.
그리고 나머지 else문은
정상에서 미끄러진 위치를 기준으로 몫이 있냐 없냐를 계산합니다.
왜냐하면 하루에 올라갈 수 있는 높이를 a - b라고 할 수 있는데,
그냥 주어진 정상의 높이에서 이 높이를 나누면 미끄러지지 않아서 도착 했는데 도착하지 않았다고 식이 나옵니다.
그래서 정상의 높이에서 미끄러졌다고 생각 한 값 c - b를 a - b(하루에 올라갈 수 있는 높이)로 나눠주었을 때
몫이 0이면 그대로 (c-b) / (a-b)가 정상에 딱 도착했다고 이야기 할 수 있고,
몫이 0이 아니라면 하루가 더 지나야 도착할 수 있다는 뜻이 되므로 (c-b) / (a-b) + 1 이렇게 식을 구성하여 풀었습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long a = Long.parseLong(st.nextToken());
long b = Long.parseLong(st.nextToken());
long k = Long.parseLong(st.nextToken());
if (a >= k)
System.out.println(1);
else {
long m = a - b; // 하루에 올라갈 수 있는 높이
k = k - b;
long z = k % m;
if (z != 0) {
z = k / m + 1;
} else {
z = k / m;
}
System.out.println(z);
}
}
}