https://www.acmicpc.net/problem/2869
시간 제한은 0.15초인데 V의 최대 입력값은 10억이므로 반복문을 사용하면 시간초과가 발생한다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int A, B, V;
cin >> A >> B >> V;
int curHeight = 0, dayCount = 0;
while(true){
curHeight += A;
dayCount++;
if(curHeight < V) curHeight -= B;
else break;
}
cout << dayCount;
return 0;
}
(V-A)까지 올라가면 그 다음날 A만큼만 더 올라가면 된다. 따라서, (V-A)까지 올라가는 데 걸리는 시간에 1을 더하면 답을 구할 수 있다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int A, B, V;
cin >> A >> B >> V;
int day = (V-A) / (A-B);
if(day * (A-B) < V-A){
day += 2;
}else {
day += 1;
}
cout << day;
return 0;
}