문제만 보면 그렇게 어려워 보이지 않는 문제이다. 처음에는 반복문으로만 작성을 했었다.
while(true)
{
Day = Day + 1;
M = M + A;
if(M >= V) break;
else M = M - B;
}
그런데 문제를 보니까 정수를 10억까지 입력할 수 있다. 10억을 반복문으로 돌리면 시간초과가 날 수 밖에 없었다. 실제로 제출했을 때 시간초과가 떴다...
결국 이 문제는 수식을 변형해서 반복문을 사용하지 않고 풀어야 하는 문제이다.
우리가 최종 목적지를 V로 잡으면 안된다. A만큼 이동할 때에는 미끄러지지 않으므로 V-A로 최종목표를 잡아야 한다. 어짜피 A만큼 이동하게 된다면 하루가 지나게 되므로 그 날은 무시가 가능해여 한다. 그렇다면 V-A 를 A-B로 나눈 만큼이 지나간 하루가 될 것이다. 정확히 0으로 나누어 떨어지면 그 날이 흘러가 날짜이고 만약 0이 아니라면 하루를 더 해줘야할 것이다.
그렇다면 코드는 다음과 같다.
#include <iostream>
using namespace std;
int main()
{
int A, B, V;
int Day;
cin >> A >> B >> V;
if((V-A) % (A-B) == 0) Day = (V-A) / (A-B);
else Day = (V-A)/(A-B) + 1;
cout << Day + 1;
}