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