본문 바로가기

Java

[Java] Baekjoon-P2869 달팽이는 올라가고싶다 풀이.

문제설명, 출처: https://www.acmicpc.net/problem/2869

 

우선 C = A - B 로 하루동안 올라갈 수 있는 높이를 저장하였다.

한번 올라가면 성공이므로 나무 막대 끝에 도착한 날에는 A만큼만 올라가고 내려오는 일이 없다.

따라서, V - A 이상만 여러 날을 반복하며 올라가고, 나머지 하루에 A만큼 올라가면 된다.

(V - A)/C를 사용하니 버그가 있었다. A, C, V 모두 int형이라서 결과로 예를 들어 4.22가 나오면 4로 출력되는 것이다.

예를 들어서, V = 100, A =3, C = 2일때, (100-3)/2 의 결과로 46.5가 46으로 나오는 것이다. 

그런데 위의 경우 우리가 C만큼을 반복해야하는 날짜는 47이다. 따라서 Math.ceil() 이라는 '올림' 메소드를 사용했다.

 

 

코드

 

//baekjoon_P2869
//Snail want to go up the tree

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class baekjoon_P2869 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine());
		br.close();
		int A = Integer.parseInt(st.nextToken()); // Up 'A' meter a day.
		int B = Integer.parseInt(st.nextToken()); // Down 'B' meter a day.
		int V = Integer.parseInt(st.nextToken()); // Total height of the tree.

		int C = A - B;
		if(V <= A) {
			bw.write(String.valueOf(1));
		} 
		else {
			bw.write(String.valueOf(1 + (int) Math.ceil((V-A)/(double)C)));
		}
		bw.flush();
		bw.close();
	}
}