백준 2869번 (달팽이는 올라가고 싶다, C++) [BAEKJOON]

달팽이는 올라가고 싶다

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

시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.15 초 (추가 시간 없음)128 MB189743543044591829.543%

문제

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

달팽이는 낮에 A미터 올라갈 수 있다.

하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

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

입력

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

출력

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

예제 입력 1

2 1 5

예제 출력 1

4

예제 입력 2

5 1 6

예제 출력 2

2

예제 입력 3

100 99 1000000000

예제 출력 3

999999901

출처

Contest > Croatian Open Competition in Informatics > COCI 2010/2011 > Contest #2 1번

알고리즘 분류


문제를 정리하면

높이가 V인 나무를 달팽이가 올라간다.

낮에 A만큼 올라간다. (+)

밤에는 B만큼 미끄러진다. (-) <정상이라면 X>

달팽이의 높이가 V가 되는 날은 언제인가?

(1 ≤ B < A ≤ V ≤ 1,000,000,000)

A – B (올라간 길이 – 내려간 길이)는 하루에 올라갈 수 있는 길이가 된다.

즉. V / (A – B) = C 는 올라가는데 필요한 일 수가 되고

나머지 연산으로 V mod(A – B)의 값이 0보다 크다면 하루를 더 해주면 된다.

예제의 5 1 6

5 / (5 – 1) = 1 (하루가 필요)

5 % (5 – 1) = 1 > 0 (나머지가 있다면 올라가는 데 하루가 더 필요하다는 뜻)

통과된 코드

#include <iostream>

using namespace std;

// A 올라가는 거리, B 미끄러지는 거리, V 목표 높이
int A, B, V, result = 1;

int main()
{
	cin >> A >> B >> V;

	V -= A;

	if (V % (A - B) == 0) { result += V / (A - B); }
	else {
		result += V / (A - B);
		result++;
	}

	cout << result;

	return 0;
}

결과의 기본 값을 0으로 설정해서 틀렸다.

댓글 달기

Translate »
Scroll to Top