티스토리 뷰

728x90
반응형

 

백준 온라인 저지(BOJ) 2869번 달팽이는 올라가고 싶다

https://www.acmicpc.net/problem/2869

 

2869번: 달팽이는 올라가고 싶다

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

달팽이가 낮에는 A 미터 올라가고, 밤에는 B 미터 미끄러짐

높이가 V 인 나무에 올라가는데 며칠 걸리는지 출력

 

2. 풀이

문제를 이해하고 풀이 과정을 생각하는 데에 시간이 좀 걸렸고

코드 자체는 금방 작성할 수 있었습니다.

 

우선 달팽이는 하루에 (A - B) 미터를 올라갑니다.

그리고 마지막 날은 A 미터를 올라가고 V 에 도달합니다.

 

이를 잘 정리해보면

① 매일 A - B 미터 씩 올라가다가 처음으로 V - A 미터를 넘는 시점을 찾고,

② 거기에 +1 을 하면 정답이라는 것을 알 수 있습니다. (A 미터 올라서 V 도달 가능)

 

따라서 (V - A) / (A - B) 를 올림하고, 거기에 1을 더하면 정답입니다.

올림 함수(ceil)는 구현할 수 있으면 종종 쓰일 것 같아서 구글링 후 익히면서 사용했습니다.

 

3. 코드

#include <stdio.h>

int ceil(double n) {
	int r = (int)n;

	if (n == (double)r)
		return r;
	else
		return r + 1;
}

int main() {
	int a, b, v;
	scanf("%d %d %d", &a, &b, &v);

	double x = (double)(v - a) / (a - b);
	printf("%d\n", ceil(x) + 1);

	return 0;
}
728x90
반응형
댓글