[C++] 백준 2869번 달팽이는 올라가고 싶다

xyzw·2025년 8월 28일
0

algorithm

목록 보기
73/97

https://www.acmicpc.net/problem/2869

풀이

A>B 이므로 달팽이가 정상에 올라가는 시점은 낮이다.

정상에 도달하게 되는 마지막 날 낮을 제외하고, 그 전날까지 달팽이가 올라오는 데 며칠이 걸리는지 구해보자.
마지막 날 낮에 움직이는 거리를 제외한 막대 길이(V-A)를 하루동안 움직이는 거리(A-B)로 나누면 된다.

이때, (V-A)/(A-B)가 나누어 떨어지지 않을 수 있으므로, 실수형으로 변환하여 계산한 후 올림을 한다.
그리고 큰 수가 들어올 때를 고려하여 double 형으로 변환해야 한다. float로 변환할 경우 예제 3을 실행하면 오버플로우가 발생한다.

코드

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int ans = 0;
    int A, B, V;
    cin >> A >> B >> V;
    
    ans = ceil(double(V-A)/(A-B)) + 1;
    
    cout << ans;
    
    return 0;
}

0개의 댓글