Algorithm/Baekjoon(Java)

[백준/JAVA] 2869 : 달팽이는 올라가고 싶다 ( 기본 수학 1 )

비망노트 2022. 8. 2. 20:42
문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 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

 

⭕ 풀이

import java.io.*;
import java.util.*;

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());
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());
        int day = (int)(Math.ceil((double)(V-A)/(A-B)));
        System.out.print(day+1);
    }
}

✅ 생각의흐름

1. 100까지가야하는데 도착하면 더이상 미끄러지지않고 하루에 5만큼 간다면 95~99의 범위까지만 간뒤 +1을 해야겠다라고 생각

    즉 V - A 까지만 가면 되겠다고 생각

 

2. 하루에 올라갔다 미끄러지는높이는 A - B = x

    V - A 를 x로 나눈뒤 + 1 을 하면 되겠다.

 

3. 하지만 예제 2번처럼 A=5 B=1 C=6 인상황에서는

   V-A (6-5) 를 A-B (5-1) 로 나눈다면 즉 1 / 4 는 0.25 정수형이라 소수점날리면 0이된다.

 

4. 소수점이 0.001 이라도 있다면 하루로 카운트 해야하므로

   Math.ceil 올림 메서드를 사용해 올린 뒤 +1 을 계산해 출력한다.