BOJ(백준)

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

ruming 2021. 2. 14. 20:41

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


여기서 고려해야 할 건 시간제한이다. (0.15초) 그리고 날짜 수를 잘 계산해야 한다. a=2, b=1, v=5일 때 이틀동안 4미터를 가고 사흘째에 6미터를 가니 총 3일이 걸린다. v <= (a-b)*d + b 라는 식을 세울 수 있다. b를 더하는 이유는 달팽이가 목표지점에 올라간 날은 미끄러지는 걸 생각하지 않아도 되기 때문이다. d에 대해 정리하면 (v-b)/(a-b) <= d 라는 식이 나오는데, 좌항의 식이 정수로 떨어지지 않을 때는 정수인 d에 1을 더해주어야 하므로, 다음과 같이 코드를 짤 수 있다.

#include <stdio.h>
#include <math.h>
int main(void){
	int a, b, v;
	scanf("%d%d%d", &a, &b, &v);
	if((v-b)%(a-b)==0)	printf("%d", (v-b)/(a-b));
	else	printf("%d", (v-b)/(a-b)+1);
	return 0;
}

a, b, v를 입력받고 (v-b)/(a-b)의 나머지가 0이면 그 값을 출력, 0이 아니면 +1을 해서 출력한다.