버미

백준 2869번 - 달팽이는 올라가고 싶다 (Java) 본문

코딩 트레이닝

백준 2869번 - 달팽이는 올라가고 싶다 (Java)

Bum_2 2024. 7. 6. 16:52

달팽이는 매일 climb 만큼 올라가고, 밤에는 slip 만큼 미끄러진다. 목표는 cnt 높이에 도달하는 것.

 

days 첫째 날 둘째 날  ... 마지막 날
높이 증감 + climb - slip + climb - slip + climb - slip + climb 

 

마지막 날에는 미끄러지지 않기 때문에 (cnt - slip)으로 계산하며 순수 올라가는 높이(climb - slip)로 나눠 날짜를 계산한다.

 

하지만, 마지막 날은 마지막 날에 도달해야할 높이(cnt - slip)에서 순수 올라가는 높이(climb - slip)을 나눴을 때 0이 아니라면 남아있는 거리가 있어서 우리가 생각했던 마지막날보다 하루를 더 올라가야 한다. 

0 이라면 우리가 생각했던 마지막 날에 딱 맞춰서 올라갔던 것이다. 그래서 오르기위한 추가적인 날은 없다.

if ((cnt - slip) % (climb - slip) != 0) {
    days++;
}

 

 

- 최종 코드

class Main {
    public static void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String line = br.readLine();
        StringTokenizer st = new StringTokenizer(line, " ");
        int climb = Integer.parseInt(st.nextToken());
        int slip = Integer.parseInt(st.nextToken());
        int cnt = Integer.parseInt(st.nextToken());

        // Math.ceil을 사용하여 올림 처리
        int days = (cnt - slip) / (climb - slip);
        if ((cnt - slip) % (climb - slip) != 0) {
            days++;
        }

        bw.write(String.valueOf(days));
        bw.close();
        br.close();
    }

    public static void main(String[] args) throws IOException {
        solution();
    }
}