백준 2869번 달팽이는 올라가고 싶다

#2869. 달팽이는 올라가고 싶다

Problem

높이 V미터인 나무막대

  • 낮에 A미터 올라감
  • 밤에 B미터 내려감
  • 정상에서는 안내려감

나무 막대 모두 올라가는데 걸리는 일 수

하루에 +A -B

B < A ≤ V ≤ 10억

어차피 값은 10억을 넘을 수 없으니 int 사용해도 무방

Ex.

 input
2 1 5
 output
4
  • 설명

1일: 0+2 = 2

2일: 2-1+2 =3

3일: 3-1+2 = 4

4일: 4-1+2 = 5

하지만 제한시간이 0.15초이기에 이런 단계로 풀면 안된다.
하루는 무조건 A가 되고 그 후는 -B+A가 반복이니 다음이 성립한다.

하지만 x는 정수이므로 위와 같은 부등호를 붙여주어야 한다.

3 1 6

1일: 3

2일: 3-1+3 = 5

3일: 5-1+3 = 7

공식: x ≥ 1.xx 따라서 x는 2, 총 일 수는 2+1 = 3일이된다.

  • 근데 이 공식 적용하면 V가 되었다가 다시 줄어드는 경우가 있어서 답에 영향을 주나? → NO
  • ceil() 때문에 피연산자는 double형으로, 결과값은 int형으로 두었다.
    (결과값을 double로 설정하면 출력값이 큰 경우 부동소수점 방식으로 출력되어 틀린 답이 된다.)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <cmath>
    using namespace std;
    int main() {
    double a, b, v;
    int day = 1;
    cin >> a >> b >> v;
    double ans = (v-a) / (a-b);
    ans = ceil(ans);
    day += ans;
    cout << day << endl;
    return 0;
    }