Chat 상우

[백준 2869 자바] 달팽이는 올라가고 싶다 알고리즘 본문

algorithm

[백준 2869 자바] 달팽이는 올라가고 싶다 알고리즘

chat-rilla 2024. 9. 20. 14:58

백준 2869 자바 달팽이는 올라가고 싶다.

해당 문제는 일반 수학에 포함된 문제로 엄청 쉽게 해결이 가능하다고 생각했다.

그런데 쉽게 생각했던 것과 다르게 시간제한이 있어서 생각보다 문제를 푸는데 시간이 걸렸다.

포스팅은 정답 코드를 시작으로 부분 코드 블록으로 정리해서 작성한다.


정답코드

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(), " ");
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        int V = Integer.parseInt(st.nextToken());

        // 마지막 날을 제외한 거리
        int heightToClimb = V - A;

        // 하루에 올라가는 순수 거리
        int dailyClimb = A - B;

        // 필요한 일수 계산
        int days;
        if (heightToClimb <= 0) {
            days = 0; // 첫날에 이미 목표 도달
        } else {
            days = (heightToClimb + dailyClimb-1) / dailyClimb; // 올림 처리
        }

        // 총 일수는 필요한 일수 + 마지막 날
        System.out.println(days + 1);
    }
}

 

해설

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());

위 코드는 사용자가 입력한 값을 Buffer로 받고 Buffer의 " "로 구분하여 저장한다.
이후 저장된 값을 각각의 변수에 저장하는 코드이다. 

효율적인 문자열 처리를 위해 작성되었다.

각각의 변수는 A(하루 이동 거리), B(미끄러지는 값), V(미터)의 값을 저장하기 위해서 작성되었다.

 

 // 마지막 날을 제외한 거리
int heightToClimb = V - A;

// 하루에 올라가는 순수 거리
int dailyClimb = A - B;

heightToClimb는 마지막 날을 제외한 이동 거리를 구하기 위한 변수로 이렇게 구하는 이유는 정상에 올라서면 미끄러지지 않기 때문이다. daliyClimb는 순수하게 하루에 올라가는 거리로 달팽이가 잠을 자는 시간 동안 미끄러지기 때문에 하루 동안 실제로 이동되는 값을 구하기 위함이다.

// 필요한 일수 계산
int days;
if (heightToClimb <= 0) {
	days = 0; // 첫날에 이미 목표 도달
} else {
	days = (heightToClimb + dailyClimb-1) / dailyClimb; 
}

이제부터 실제로 이동에 필요한 일수를 계산하게 된다. 이 계산을 위해서는 마지막 일을 제외한 날에 실제 이동 거리를 더하고 실제 이동 거리를 빼게 된다.

heightToclimb는 달팽이가 마지막 날 도달하기 위해 필요한 거리를 의미하여 dailyClimb는 실제 이동 거리를 의미하게 된다. 이는 이동에 필요한 전체 거기를 계산하기 위해서 사용되며 여기에 실제 이동 거리를 나누면 총 이동 거리를 구할 수 있게 되는 것이다.

 

'algorithm' 카테고리의 다른 글

자바 - 정수의 약수 개수 구하기  (0) 2024.09.23
[백준 11005 자바] 알고리즘 진법 변환 2  (0) 2024.09.19