loading
본문 바로가기
Coding/Backjoon

[BOJ / java] 2869 : 달팽이는 올라가고 싶다

by NeuLyeo 2024. 3. 11.

[BOJ / java] 2869 : 달팽이는 올라가고 싶다

 

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

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

www.acmicpc.net

 

 

 

 

📚 Table of Contents

     

     

     

     

    문제

    땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

     

    달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

     

    달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

     

     

    입력

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

     

     

    출력

    첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

     

     

    예제

    예제 입력 1

    2 1 5

    예제 출력 1

    4

     

    예제 입력 2

    5 1 6

    예제 출력 2

    2

     

    예제 입력 3

    100 99 1000000000

    예제 출력 3

    999999901

     

     

     

     

    문제 풀이

    코드설명

    • 코드의 동작 방식:
      • 사용자로부터 세 개의 정수 A, B, V를 입력받습니다. 여기서 A는 낮 동안 올라갈 수 있는 높이, B는 밤 동안 미끄러지는 높이, V는 목표 높이입니다.
      • day는 달팽이가 정상에 도달하는 데 필요한 일수를 나타냅니다.
      • (v - b - 1) / (a - b) + 1는 달팽이가 정상에 도달할 때까지 필요한 총 일수를 계산합니다. 이 식은 달팽이가 마지막 날에는 미끄러지지 않고 정상에 도달할 수 있음을 고려하여 구성되었습니다.
      • 계산된 day 값을 출력합니다.
    • 코드의 핵심 부분:
      • 달팽이가 정상에 도달하기 직전의 날까지의 이동 거리를 계산하는 과정입니다. 이는 (v - b - 1) / (a - b) 식으로 표현됩니다. 여기서 -1은 마지막 날에 정상에 도달하기 직전까지의 거리를 고려하기 위한 것입니다.
      • 최종적으로 1을 더해주는 이유는 마지막 날을 포함하기 위함입니다.
    • 코드의 흐름:
      • 사용자 입력 → 입력값 파싱 → 필요 일수 계산 → 결과 출력

     

     

    풀이

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class _07_달팽이는올라가고싶다 {
        public static void main(String[] args) throws IOException {
            // 사용자로부터의 입력을 받기 위한 객체 생성
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            // 입력값을 공백으로 구분하여 배열에 저장
            String[] arr = br.readLine().split(" ");
    
            // 낮에 올라갈 수 있는 높이
            int a = Integer.parseInt(arr[0]);
            // 밤에 미끄러지는 높이
            int b = Integer.parseInt(arr[1]);
            // 목표 높이
            int v = Integer.parseInt(arr[2]);
    
            // 달팽이가 정상에 도달하는 데 필요한 일수 계산
            int day = (v - b - 1) / (a - b) + 1;
    
            // 결과 출력
            System.out.println(day);
        }
    }

    'Coding > Backjoon' 카테고리의 다른 글

    [BOJ / java] 2501 : 약수 구하기  (0) 2024.03.21
    [BOJ / java] 5086 : 배수와 약수  (0) 2024.03.21
    [BOJ / java] 1193 : 분수 찾기  (0) 2024.03.11
    [BOJ / java] 2292 : 벌집  (0) 2024.03.09
    [BOJ / java] 2903 : 중앙 이동 알고리즘  (0) 2024.03.09