본문 바로가기
백준

[백준] 2869번 : 달팽이는 올라가고 싶다 – JAVA [자바]

by Hongwoo 2022. 7. 11.
반응형

https://www.acmicpc.net/problem/2869

 

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

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 2869번 달팽이는 올라가고 싶다는 실버 5 난이도의 수학 문제이다. 이 문제에서는 막대의 높이 V, 달팽이가 올라가는 높이 A, 그리고 내려오는 높이 B가 주어진다. 낮에 A미터 올라가고 밤에 B미터 내려온다. 이때, 막대를 모두 올라가려면 며칠이 걸리는지를 출력하면 되는 문제이다.

 

우선 이 문제는 다음과 같은 공식으로 쓸 수 있다.

 

 N(A - B) + A = V

 

즉, 이 문제는 N일 동안 N(A- B)만큼 올라가고 마지막 날에 A미터 올라가면 총 V미터 올라온 게 되는 것이다. 따라서, N을 구하려면 다음과 같이 공식을 조정할 수 있다.

 

N = (V - A) / (A - B)

 

하지만 마지막 날에 A미터 올라가야 하니 총 걸리는 날은 N + 1이 되겠다. 

 

이 문제에서 또 주의해야 할 점이 바로 (V - A) / (A - B)가 1 미만일 경우이다. 이때는 Math.ceil() 함수를 이용해서 올림 시켜준다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

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 x = (int)Math.ceil((double)(v-a) / (double)(a-b));
        System.out.print(x+1);
    }
}

 

 

반응형

댓글