https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
시간제한 메모리제한 제출 정답 맞힌 사람 정답 비율
| 0.25 초 (추가 시간 없음) | 128 MB | 250952 | 79798 | 63405 | 31.259% |
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
핵심
문제의 정답률이 아주 낮다. 나도 왜그러지 하고 풀었는데 시간 초과가 뜨는 것이었다. 시간제한을 보니 0.25초로 아주 빠르게 통과해야 하는데, 나는 scanner가 편해서 평소에 scanner를 사용하는데, BufferedReader를 사용하니 빠른시간에 통과할 수 있었다. 반복문을 사용해도 시간초과가 난다고 한다.
1. bufferedReader 를 이용하여 값을 입력받는다. bufferedReader는 String이기 때문에 Integer.parseInt로 가공을 해주어야 int로 사용할 수 있다.
2. height는 달팽이가 하루에 올라가는 높이이다.
3. 걸리는 일수는 (올라가야 하는 높이 - 달팽이가 낮에 올라갈 수 있는 높이) / (달팽이가 하루에 오르는 높이) 를 해준다.
4. 소수점이 나오는경우에도 +1을 해주어야하므로 Math클래스의 ceil메서드를 이용했다.
5.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int A = Integer.parseInt(str[0]);
int B = Integer.parseInt(str[1]);
int V = Integer.parseInt(str[2]);
int height = A - B;
int days = (int)Math.ceil((double)(V-A) / height);
System.out.println(days + 1);
}
}
'Algorithm' 카테고리의 다른 글
| [백준 알고리즘 JAVA] 2577번 숫자의 개수 (0) | 2024.04.11 |
|---|---|
| [백준 알고리즘 JAVA] 2475번 검증수 (0) | 2024.04.11 |
| [백준 알고리즘 JAVA] 2292번 벌집 (0) | 2024.04.11 |
| [백준 알고리즘 JAVA] 2903번 중앙 이동 알고리즘 (0) | 2024.04.11 |
| [백준 알고리즘 JAVA] 2720번 세탁소 사장 동혁 (0) | 2024.04.11 |