본문 바로가기

생각정리/코딩테스트

[JAVA 알고리즘]BAEKJOON 2869번 달팽이는 올라가고 싶다.

달팽이는 올라가고 싶다.


문제 설명

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

제한사항

  • 없음

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

입출력 예

answers return
2 1 5 4
5 1 6 2
100 99 1000000000 999999901

나의 문제풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int answer = 0;
		
		String array[] = br.readLine().split(" ");
		int a = Integer.parseInt(array[0]);
		int b = Integer.parseInt(array[1]);
		int v = Integer.parseInt(array[2]);
		
		if (a == v) {
			answer = 1;
		} else {
			answer = (int) Math.ceil((double)(v - a) / (double)(a - b)) + 1;
		}
		
		System.out.println(answer);
		
	}
}
  • 공백으로 구분된 입력값을 버퍼리더를 이용하여 받아 split함수를 이용해 배열에 넣어준다.
  • 올라가는 길이와 막대 길이가 같으면 하루에 다 올라가기 때문에 조건을 주어 시간을 단축시켜준다.
  • 마지막날 올라가는 길이를 제외한 올라가야 하는 길이 (v - a)
  • 하루에 올라가는 길이 (a - b)
  • 올라가야 하는 길이 / 하루에 올라가는 길이 = 올라가는데 걸리는 일 수 (정수형일 경우 자동으로 내림으로 정수가 되어 실수형으로 계산한 뒤 올림을 해주어야 한다. 또한 float형일 경우 길이에 문제가 생겨 double형으로 해주어야 한다.)


느낀 점

앞선 문제에서 필요해서 찾아본 버퍼리더의 활용 덕분에 쉽게 풀 수 있었다. 다른 문제들과 달리 수식으로만 풀 수 있어서 의외로 편한 부분이 있었다.