본문 바로가기

TIL/Algorithm

Java 백준 2869번 문제 - 달팽이

반응형

달팽이는 올라가고 싶다 성공 출처 다국어

한국어   

시간제한 메모리 비율

0.15 초 (추가 시간 없음) (하단 참고) 128 MB 106820 28405 24011 27.976%

문제

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

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

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

입력

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

출력

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

예제 입력 1 

2 1 5

예제 출력 1 

4

 


BufferedReader로 입력값을 받기 위해 미리 선언

공백 기준으로 나뉘어서 숫자가 들어오기 때문에 StringTokenizer 선언

값을 출력하기 위해 BufferedWriter 선언

 

int a = 낮에 올라간 높이

int b = 밤에 미끄러진 높이

int v = 나무의 높이

 

여기서 중요한 점은 마지막 부분에서

달팽이가 마지막 날 올라가면 미끄러지지 않기 때문에

단순한 게 = v로 계산하면 안 된다

 

올라가야 하는 날을 x 변수라고 선언하고

x는 (v-b) / (a-b)로 되는데

예시로 2가지 경우를 들면

 

a=2 , b=1, v=5 일 때 : (5-1) / (2-1) = 4일 

즉 정확하게 나누어 떨어지면 괜찮지만

 

a=5, b=1, v=6 일 때 : (6-1) / (5-1) = 1.25일 => 1일

즉 나누어 떨어지지 않으면 다음날 낮에 한 번 더 올라가야 한다는 것이다

그렇기 때문에 나누어 떨어지지 않으면 일수를 하루 추가해야 한다

 

마지막으로 x를 bw에 담고 flush 해준다

 

반응형