위의 문제는 달팽이가 낮에 A미터를 오르고 밤에 B미터 미끄러지면 V미터인 나무 막대를 모두 올라가는데 며칠이 걸리는지 구하는 알고리즘이다. 주의해야 할점은 달팽이는 "정상에 올라간 후에는 미끄러지지 않는다."
위 문제를 읽고 알 수 있는 점은, 달팽이는 낮에 A미터를 올라가고 B미터 미끄러지니, 하루에 올라가는 총 길이는 (A-B)미터 인것이다.
그럼, 달팽이가 나무 막대를 올라가는데 걸리는 일수는 나무 막대 길이 V / (A-B) 라고 생각했다.
근데 이렇게 하면, 정상에 올라간 후 에도 다시 내려오는 사태가 벌어져서, 일수가 더 추가 된다. 있다. 그래서 나무 막대 길이 V 에서 밤에 내려오는 길이 B 를 빼주었다.
총 걸리는 일수는 나무 막대 길이에서 밤에 내려오는 길이를 빼준 값을 하루에 올라 가는 총 길이로 나눈 몫이다. 만약 나눈 후, 나머지가 있으면 하루를 추가하면 된다.
일수 = (V-B) / (A-B); if 나머지 > 1 then, 일수 + 1
import java.util.Scanner;
public class problem3 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int up = scanner.nextInt(); //달팽이가 낮에 올라가는 길이
int down = scanner.nextInt(); //밤에 내려오는 길이
int length = scanner.nextInt(); //나무 막대 길이
int days; //올라가는 일수
days = (length - down) / (up - down); //정상에 도착 후 미끄러지지 않기 때문에 length에서 down을 빼준 후,
//up에서 down을 빼준 값으로 나누어준다.
if((length-down)%(up-down)!=0){ //만약 나머지가 남을 경우, 하루 추가
days++;
}
System.out.println(days);
}
}