-
[백준 2869] 달팽이는 올라가고 싶다[공부] 코테/백준 2024. 3. 12. 15:07
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
달팽이는 V까지 올라가야한다. 낮에 A만큼 올라가고 밤에 B 만큼 내려오는데 V에 도달했으면 내려오지 않는다고 한다.
A : 낮에 올라간 거리
B : 밤에 내려온 거리
V : 목표 높이
A : 2, B : 1, V : 5 라고 가정한다면,
1일째 올라간 높이 : 1 남은 : 4
2일째 올라간 높이 : 2 남은 : 3
3일째 올라간 높이 : 3 남은 : 2
4일째 올라간 높이 : 5 남은 : 0 => V에 도달 할 경우는 B만큼 떨어지지 않는다.
그럼으로 총 걸린 날은 4일
만약 단순히 V / (A-B) 라고 생각했다면 이 식은 사용 할 수 없다.
마지막 날은 B만큼 내려올 필요가 없으므로 해당 식은 (V-A) / (A-B) 로 바꿔서 사용해야 한다.
여기서 (V-A)는 마지막에 올라갈 A만큼의 거리를 남겨둔다는 의미이다.
(V-A) / (A-B) 식의 해당 값 즉 걸린 일 수를 day라고 하고 값을 구해보면 두가지 패턴이 존재한다.
・ 딱 맞아 떨어질 경우 : 남은 A만큼의 +1을 해주면 된다.
・ 나머지가 존재할 경우 : 나머지의 +1 과 남은 A의 +1 즉 +2를 해주면 된다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String text = br.readLine(); StringTokenizer st = new StringTokenizer(text, " "); br.close(); // 낮에 올라 갈 수 있는 높이 int a = Integer.parseInt(st.nextToken()); // 밤에 미끄러지는 높이 int b = Integer.parseInt(st.nextToken()); // 높이 int v = Integer.parseInt(st.nextToken()); // 걸린 날 int day = 0; day = (v-a) / (a-b); if ((v-a)%(a-b) != 0) { day+=2; } else { day++; } System.out.println(day); } }
'[공부] 코테 > 백준' 카테고리의 다른 글
[백준 1914] 하노이 탑 (0) 2024.03.14 [백준 1978] 소수 찾기 (0) 2024.03.14 [백준 1152] 단어의 개수 (0) 2024.03.12