백준 2869번 - 달팽이는 올라가고 싶다 c언어

김대일·2021년 5월 6일
0

낮에는 A만큼 올라가고 밤에는 미끄러져서 B만큼 미끄러지는데 V까지 올라가는데 며칠이 걸리는지 구하는 프로그램.

주의사항

  • 처음에 너무 쉽게 풀리길래 뭐지 하고 후다닥 입력했는데 시간초과가 떳다
  • 제한시간이 0.15초로 반복문으로는 절대 풀수없다.
  • 수학적 개념이 필요하다.

// 첫 제출 코드


#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 을 해주면 정확한 값이 나오게된다.

느낀점

다시 한번 느끼는 수포자의 벽.. 수학의 길은 멀고도 험하다. 공식을 생각하고 이해하는데 한참 시간이 걸렸다. 참으로 간단한 문제인것같은데..

profile
도비코딩

0개의 댓글