[Java] 백준 2869번: 달팽이는 올라가고 싶다

Sechan Beak·2023년 7월 4일
3

PS

목록 보기
1/2
post-thumbnail

백준 2869번 문제 설명

a, b, v가 차례로 주어진다.
구하는 값: 달팽이가 총 v를 올라가는데 걸리는 일 수
달팽이는 낮에 a만큼을 올라가고 밤에 자면서 b만큼을 미끄러진다.


그렇다면 달팽이는 하루가 갈 때 a를 올라간 후에 b만큼 뒤로가니까, 결국 a-b만큼을 올라간다고 볼 수 있다.

a-b을 편의상 step(달팽이의 발걸음)이라고 하자.

단, 변수가 되는 것은 만약 남은 높이가 a보다 작거나 같은경우, 한번에 a만큼을 올라가기 때문에 이 때는 step만큼이 아니라 a만큼을 올라가게 된다.

이를 고려해서 식을 세워보았다.
step = a-b  /  x=일 수  /  oneday_m=하루면 올라갈 만큼의 길이(m)
step = a-b, x=일 수, oneday_m=하루면 올라갈 만큼의 길이(m)


step만큼 x일을 올라갔을 때, oneday_m보다 같거나 더 올라간 상태라면, 이후 딱 하루만 더 올라간다면 정상에 도착할 것이다.(정상에 도달할 때까지의 일 수만 구하면 되기 때문에, 정상보다 더 올라가는 건 고려할 필요가 없다.) - 문제에 b<a라고 했기에 a-b는 0이 아니다.

이를 다음과 같이 코드로 구현하였다.

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
		String[] s = rd.readLine().split(" ");
		int a = Integer.parseInt(s[0]);
		int b = Integer.parseInt(s[1]);
		int v = Integer.parseInt(s[2]);
		int x = (int)(Math.ceil((v-a) / (double)(a-b))); // 올림한 후에 int로 casting 해준다
		System.out.println(x+1); //구해진 x(일 수)에 +1일만 더 올라가면 정상에 도달한다..!
	}
}

step*x가 정수이기 때문에, double 값에 올림을 해주어서 크거나 같은 최소 정수를 구해준다.

그 이후에 +1을 하여 출력하면, 정상에 도달하는데까지 걸린 일 수를 구할 수 있다.

profile
거사 하나 치르면 올림

0개의 댓글