[백준 C] 2869 : 달팽이는 올라가고 싶다

anfruf·2022년 7월 6일

백준 C언어

목록 보기
58/62
  1. C언어 : 기본수학1(4)

07.JUL.2022

문제 : 기본수학1

땅 위에 달팽이가 있다. 이 달팽이는 높이가 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을 해줘야 한다.

0개의 댓글