우선 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();
}
}
'Java' 카테고리의 다른 글
[Java] Baekjoon_P2675 문자열 입력받아 반복 출력 (0) | 2020.12.20 |
---|---|
[Java] Baekjoon_P10809 Position of Alphabet (0) | 2020.12.20 |
[Java] Baekjoon_P11720 문자열의 각 자리 정수 합 구하기. (0) | 2020.12.20 |
[Java] 1부터 10000까지의 자연수에서 8의 개수를 세는 연습문제. (0) | 2020.12.16 |
[Java] Java 연습문제: Self Number 탐색 프로그램 (0) | 2020.12.16 |