java

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

게르마늄팔찌전도사 2024. 1. 5. 22:44

문제

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

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

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

입력

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

출력

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package backjoon_2869;
import java.io.*;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int up = Integer.parseInt(st.nextToken());
        int down = Integer.parseInt(st.nextToken());
        int stick = Integer.parseInt(st.nextToken());
        int cnt = 0;
        int day = 0;
        day = (stick - down - 1 ) / (up-down)+1;
        System.out.println(day);
    }
 
}
 
cs

 

이 문제는 간단하게 stick의 down, up 만 생각하면 된다. 처음에는 무조건 while로 해결하려고 했다. 그래서 

import java.io.*;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int up = Integer.parseInt(st.nextToken());
        int down = Integer.parseInt(st.nextToken());
        int stick = Integer.parseInt(st.nextToken());
		int cnt = 0;
		int day = 0;
		while (true) {
			cnt += up;
			day++;
			if(stick <= cnt)
				break;
			cnt -= down;
		}
		System.out.println(day);
	}

}

 

이렇게 무한반복하게 만들어 단순 무식하게 생각했다. 그러니깐 시간 초과가 났고, 수학 식으로 생각해야한다는 걸 알게 됐다. 

그래서 식을 생각 해낸게

올라야 하는 실제 높이 / 하루동안 올라가야 하는 높이 다.

하지만 마지막 날에 정상에 도달하기 직전까지의 높이는 stick - down보다 항상 작아야한다. 그래서  1을 빼준다.

(stick - down - 1)

마지막 날에 달팽이가 정상에 도달하는 것을 고려하여 1을 더한다.

(up - down) + 1

'java' 카테고리의 다른 글

[java] 2563 색종이  (0) 2024.03.19
[java] 2193번 이친  (0) 2024.01.16
[java] 10844 쉬운 계단 수  (0) 2024.01.04
[java] 11718 그대로 출력하기  (0) 2024.01.02
[java] 9095번 1, 2, 3 더하기  (1) 2023.12.26