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

Hyeongmin Jung·2025년 11월 18일

java

목록 보기
32/32

링크 | https://www.acmicpc.net/problem/2869

문제 |

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

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

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

입력 |

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

출력 |

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

예제 |

Solution |

마지막날 전 일수를 k라고 할 때,

k(a-b)+a >= v
k >= (v-a)/(a-b)

(v-a)/(a-b)의 올림값+1 이 최종 일수가 된다.
(k는 마지막날 전날이므로 1을 더해줌)

public class Snail {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		int v = sc.nextInt();
		
		System.out.println(riseTree(a,b,v));
	}
	
	public static int riseTree(int a, int b, int v) {
		if ( (v-a)%(a-b)==0 ) {
			return (v-a)/(a-b)+1;
		}else {
			return (v-a)/(a-b)+2;
		}
	}
}
  • Math.ceil() : 올림
  • Math.floor() : 내림
  • Math.round() : 반올림
    java에서 정수(int)간 연산결과는 정수이므로 double로 형변환해야 소수점이 계산됨

    int day = (int)Math.ceil((double)(v-a)/(a-b)) + 1;

0개의 댓글