728x90
문제
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
출력
첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.
내 풀이
하루 동안 올라갈 수 있는 높이는 a - b 즉, (낮 동안 오르는 길이 - 밤 동안 내려오는 길이)
나무 막대의 길이가 v 일때, v 를 a - b 로 나눈 몫과 나머지로 계산하면 되지 않을까 싶지만, 문제에는 중요한 포인트가 있습니다.
'정상에 올라간 후에는 미끄러지지 않는다'
달팽이가 낮 동안에 정상에 오르게 되면 밤에 미끄러지는 것을 고려하지 않습니다.
만약 v를 그대로 사용한다면, a = 2, b = 1, v = 5 일 때, 5일이 소요됩니다. 정상에 도달했음에도 미끄러지기 때문이죠.
때문에 v = v - b 를 통해 낮을 기준으로 계산해주어야 합니다.
이후, v % dayHeight != 0 즉, 남은 길이가 있으면 하루가 더 필요하기 때문에 day를 +1 해줍니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(tk.nextToken());
int b = Integer.parseInt(tk.nextToken());
int v = Integer.parseInt(tk.nextToken());
int dayHeight = a - b;
int day = 0;
v -= b;
day = v / dayHeight;
if (v % dayHeight != 0) {
day++;
}
System.out.println(day);
}
}
728x90
'코딩테스트' 카테고리의 다른 글
[백준/Java] 소수 구하기 (0) | 2023.03.07 |
---|---|
[백준/Java] ACM 호텔 (0) | 2023.03.07 |
[백준/Java] 베르트랑 공준 (0) | 2023.03.06 |
[백준/Java] 설탕 배달 (0) | 2023.03.06 |
[백준/Kotlin] 11286번 - 절대값 힙 (0) | 2023.01.22 |