문제 :
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력 :
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
Scanner와 Java 11을 사용하면 시간초과로 절대 통과할 수 없는 문제였습니다. Scanner와 Java 8을 사용하면 문제해결은 가능하지만 BufferedReader 사용을 권장하는 문제라고 합니다. 수학문제는 여전히 쉽지않습니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int up = in.nextInt(); // A
int down = in.nextInt(); // B
int length = in.nextInt(); // V
in.close();
// 하루동안 총이동량은 up - down이다.
// 낮동안 정점에 올라갔을때는 down이 발생하지 않는다는 조건이 있으므로
// length에서 down을 뺀 값에서 총 이동량을 나누면 몇일 걸리는지 알수있다.
int day = (length - down) / (up - down);
// 나머지가 있을 경우(남은 길이가 있을경우)
if((length - down) % (up - down) != 0) {
// 다음날 낮에 정점에 도달하므로 day++
day++;
}
System.out.println(day);
}
}