낮에는 A만큼 올라가고 밤에는 미끄러져서 B만큼 미끄러지는데 V까지 올라가는데 며칠이 걸리는지 구하는 프로그램.
// 첫 제출 코드
#include <stdio.h>
int main(){
long long a,b,v,count=0,days=0;
scanf("%lld %lld %lld",&a,&b,&v);
while(1){
count += a;
days ++;
if ( count >= v){
break;
}
else {
count -= b;
}
}
printf("%lld", days);
return 0;
}
역시 이렇게 단순한 문제일리가 없었다.
좀 더 간략하게 코드를 바꾸기 위해 생각해보았다.
#include <stdio.h>
int main(){
int a,b,v,d;
scanf("%d %d %d",&a,&b,&v);
d = ( v - b - 1) / ( a - b) +1;
printf("%d",d);
return 0;
}
사실상 V에 도달하려면 A-B만큼 올라간 횟수를 더해주면 된다.
하지만 정상에 도달하면 더이상 미끄러지지 않는다는것을 명심해야한다.
그래서 총 올라가야하는것은 V-B이지만 만약 (V-B)/(A-B)로 나누어지지 않는다면 (V-B)/(A-B)를 한것보다 +1을 해주면 정답이 된다.
하지만, 그냥 (V-B)/(A-B)+1을 했는데 안나눠지는 경우도 있으니 (V-B -1)/(A-B) +1 을 해주면 정확한 값이 나오게된다.
다시 한번 느끼는 수포자의 벽.. 수학의 길은 멀고도 험하다. 공식을 생각하고 이해하는데 한참 시간이 걸렸다. 참으로 간단한 문제인것같은데..