코딩테스트/JAVA

[JAVA/백준 2869번] 달팽이는 올라가고 싶다

할루솔이 2023. 12. 2. 11:49
반응형

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

 

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

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

www.acmicpc.net

 

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 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

 


👉 풀이과정

while문을 사용해서

int day = 0;
int up = 0;

while (up < v) {
    up += a;
    day++;

    if (up >= v) {
        break;
    }

    up -= b;
}

이렇게 작성했는데 시간초과가 생겼다..ㅠ

반복문을 제거하고 효율적인 알고리즘을 생각했다.

 

(v - b - 1): 나무 막대의 높이(V)에서 밤에 미끄러지는 높이(B)를 빼고, 1을 뺀다.

이렇게 하는 이유는 달팽이가 정상에 도달한 후에는 더 이상 미끄러지지 않기 때문!

(a - b): 낮에 올라가는 높이(A)에서 밤에 미끄러지는 높이(B)를 뺀다. 

(v - b - 1) / (a - b): 달팽이가 정상에 도달하기 위해 필요한 횟수를 계산한다. 이 값은 정상에 도달하기 전까지 달팽이가 올라갔다가 미끄러지는 횟수.

+ 1: 정상에 도달한 다음에는 더 이상 미끄러지지 않기 때문에 정상에 도달했을 때의 이동

 

 

📌 제출코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int v = scan.nextInt();

        int day = (v - b - 1) / (a - b) + 1;

        System.out.println(day);
    }
}

 

끝!

 

 

반응형

'코딩테스트 > JAVA' 카테고리의 다른 글

[JAVA/백준 1427번] 소트인사이드  (1) 2023.12.05
[JAVA/백준 10845번] 큐  (1) 2023.12.03
[JAVA/백준 10828번] 스택  (0) 2023.12.01
[JAVA/백준 4344번] 평균은 넘겠지  (0) 2023.11.30
[JAVA/백준 1157번] 단어 공부  (0) 2023.11.26