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

달팽이가 낮에 A만큼 올라가고 밤에 B만큼 미끄러질 때, 길이가 V인 나무막대의 꼭대기에 도착하기까지 몇 일이 걸리는 지 계산하는 수학 문제다.

시간 제한 내로 풀기 위해서는 식을 만들어서 상수시간 내로 처리해야겠다.

이 문제에서 파악할 점은 정상에 올라간 후에는 미끄러지지 않는다 는 것이다.
그렇기 때문에 도달하는 날(마지막 날) 낮에는 정상에 도착하기 때문에 밤까지 계산하지 않고, 마지막 날은 제외하고 몇 일이 걸리는 지 먼저 계산한다.


#include <iostream>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int a, b, v;
    cin >> a >> b >> v;

    int days = (v - a) / (a - b);
    if ((v - a) % (a - b) == 0)
    {
        cout << days + 1 << '\n';
    }
    else
    {
        cout << days + 2 << '\n';
    }

    return 0;
}
  1. 나누어 떨어진다면 남은 길이는 A 이하이기 때문에 마지막 날인 하루만 더해주면 된다(+1).
  2. 그렇지 않다면, V-A 까지 도달하지 못했다는 의미이다. 하루 더 올라가야 하고, 거기에 마지막 날까지 더해준다(+2).

Written by@Myunghwan
Nothing changes if nothing changes

GitHub