알고리즘/Java

백준 알고리즘 2869번: 달팽이는 올라가고 싶다

두넌 2024. 4. 4.

문제 정보


 

2869번: 달팽이는 올라가고 싶다

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

www.acmicpc.net

 

핵심


수학적으로 접근하는 문제!

난 그래도 이런 문제가 재밌는것 같다

 

어렵진 않고, 생각만 잘 하면 풀 수 있다

나는 C라는 새로운 변수를 생각해 냈는데,

결국 낮에 A를 이동하지만 밤에는 B만큼 내려오므로 하루가 지나게 되면 결국 C(A-B) 만큼 이동한 것이 된다

 

정리해 보았을 때, 각 n일 차에 갈수 있는 최대 거리는 다음과 같다

우리는 이제 여기서 도출된 n을 가진 식을 이용해서 다음을 유도해 내면 된다

 

우리가 구하고자 하는 n에 대한 식은 다음과 같이 나타낼 수 있다는 것을 알 수 있다

 n >= (V+C-A) / C

이를 사용하여, 우리는 오른쪽 항에 모든 변수를 알고 있으므로

위 식에 대입하여 해당하는 n의 값을 구할 수 있다

 

n은 오른쪽의 식보다 크거나 같으므로,

딱 나누어 떨어지는 경우에는 해당 숫자가 n이 될 것이며

딱 나누어 떨어지지 않는 경우에는 1을 더해 준 값이 최소 n(걸린 일 수) 이 될 것이다

 

 

풀이


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int A = input[0];
        int B = input[1];
        int V = input[2];

        int C = A - B;

        int answer = ((V + C - A) / C) + (((V + C - A) % C != 0) ? 1 : 0);
        System.out.println(answer);
    }
}

 

Source Code on GitHub


GitHub에서 소스코드 보기

 

 

댓글