문제설명

 

소스코드

#include <iostream>
using namespace std;
int main()
{
	int A; int B; int V;
	cin >> A >> B >> V;
	int count = (V - A) / (A - B);
	if ((V - A) % (A - B) == 0) count += 1;
	else count += 2;
	cout << count;
}

 

풀이

  • 반복문으로 풀면 무조건 시간초과가 발생한다.
  • 정상에 일단 오르면 미끄러지지않으므로 최종적으로 가야하는 목표는 V가 아닌 V-A까지만 가면 다음날 A만큼 올라서 정상에 갈 수 있다.
  • V-A를 가는데 걸리는 기간은 (V-A) / (A-B)이다. 즉 count = (V-A) / (A-B)
  • (V-A) % (A-B) == 0일 경우 : count에 +1만큼 더해준다.(+1을 하는 이유는 V-A까지만 갔기 때문이다.)
  • (V-A) % (A-B) != 0일 경우  : count에 +2만큼 더해준다.((V-A) % (A-B)가 0이 아니므로 정상에 도달하기에 하루가 더 필요함)