- C언어 : 기본수학1(4)
07.JUL.2022
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.
또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
int main()
{
int a, b, v, day = 0;
scanf("%d %d %d", &a, &b, &v);
if ((v - b) % (a - b) == 0)
day = (v - b) / (a - b);
else
day = (v - b) / (a - b) + 1;
printf("%d", day);
}
이 문제는 시간 제한이 있어 반복문으로 풀면 틀린다.😖
공식을 세워보자.
달팽이 새ㄲ가 정상인 v 까지 오르는 데 며칠이 걸리는 지 day로 구할 예정이다.
달팽이는 a만큼 오르고 b만큼 미끄러지는데, 정점에 도달했을 때는 b만큼 미끄러지지 않는다는 조건이 있다.
따라서 아래와 같이 생각할 수 있다.
v = day x (a-b) + b
아 왜 미끄러져가지고😑
아무튼 저 위의 공식에서 day를 구하는 공식을 세워보자.
v = day x (a-b) + b
---> v-b = day x (a-b)
---> (v-b) / (a-b) = day
달팽이가 정상에 딱 맞춰 도달하는 날짜를 구할 수 있다.
그런데 이 날짜가 딱 맞아 떨어지지 않는 경우는??
예를 들어 v == 6미터이고 a==5, b==1이라고 할 때 저 공식에 대입하면
day = 5 / 4 인데, day는 int 이므로 1로 저장되어 버린다.
하루하고 반나절이라고 쳤을 때 우리는 이틀 걸려~라고 한다면 얘는 int라 반나절을 버려버린다는 거다. 구라치는 거다.
이런 경우를 생각해 딱 맞아 떨어지지 않는다면,
즉 (v-b) / (a-b) 가 0이 아닐 때는 +1을 해줘야 한다.