#59. 백준 2869번 문제 풀이: 달팽이는 올라가고 싶다 문제 원본 보기
달팽이가 있고, 높이가 V미터인 나무 막대를 올라갈 것이다. 낮에 A미터 올라가고, 밤에 자는 동안 B미터 미끄러진다. 정상에 올라한 후에는 미끄러지지 않는다. 달팽이가 정상에 올라가려면 며칠이 걸리는지 구하시오. 입력: 첫줄에 A B V. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력: 정상에 올라가는데 며칠이 걸리는지 출력
입력/출력
--입력--
2 1 5
--출력--
4
--입력--
5 1 6
--출력--
2
--입력--
100 99 1000000000
--출력--
999999901
문제풀이+해설
하루에 올라가는 거리는 d = A(낮에 이동거리) - B(밤에 미끄러진 거리)
걸리는 날은 dn = V/d 가 된다.
정상에 올라가서는 미끄러지지 않는다고 했으므로, 이것을 고려해서,
나무 높이에서 미리 미끄러짐 거리를 미리 빼주고 계산하는게 핵심이다.
그래서 공식은 일수(dn) = (V - B) / d 가 된다.
일수가 소수점을 넘으면 하루가 반영(2.1 이면 3일 임)되므로, 나눈값을 올림처리 해야 한다.

대부분 언어에는 ceil 이라는 소수점을 올림처리하는 함수가 있다. 그것을 사용하면 된다.
code sol.
#include <iostream>
#include <cmath> // ceil 올림 함수 사용을 위해 포함
using namespace std;

int main() {
  int A, B, V, d;
  double dn;
  cin >> A >> B >> V;
  // A(이동거리) B(미끄러짐거리) V(막대높이) 값을 받는다.
  d = A - B; // 하루 이동 거리
  dn = (double)(V - B) / d;
  // 마지막날 미끄러짐을 방지를 위해 막대 높이서 미끄러짐을 미리 빼줌
  // 소수까지 계산을 위해 double 로 형변환
  cout << (int)ceil(dn); // 결과값, 걸린 일수 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.