본문 바로가기

알고리즘 문제풀이

[알고리즘] 백준 2869번 "달팽이는 올라가고 싶다." (C/C++) - Don 임베디드

문제 요약:

달팽이가 길이 V 미터의 나무를 오른다.

낮에는 A 미터를 올라가고, 밤에는 B 미터를 미끄러져 내려온다.

정상에 올라간 이후에는 미끄러지지 않는다.

주어진 A, B, V 에 따라 올라가는 데 며칠이 걸릴 것인지 구하는 프로그램을 작성하라.

 

제약:

제한시간 0.15초, 메모리 128MB, 

1 <= B < A <= V <= 1,000,000,000

 

예제 1 입력. 예제 1 출력.
2 1 5 4
예제 2 입력. 예제 2 출력.
5 1 6  2
예제 3 입력. 예제 3 출력.
100 99 1000000000 999999901

정답코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
using namespace std;
 
int main()
{
    int A, B, V;
    int nTmpDist, nReturnVal;
 
    cin >> A >> B >> V;
 
    // 거꾸로 정상에서부터 생각한다.
    // 마지막 Step은 무조건 A 만큼.
    nReturnVal = 1;
    nTmpDist = (V - A);
 
    // 남은 거리 (V - A) 는
    // 하루에 갈 수 있는 거리 (A-B) 로 몇 번에 걸쳐 가야하는지 계산.
    if ((nTmpDist % (A - B)) == 0)
    {
        // 나누어 떨어지는 경우 그대로 계산.
        nReturnVal += (nTmpDist / (A - B));    
    }
    else
    {    
        // int형은 나누어 떨어지지 않는 경우 나머지는 버림된다.
        // (V - A) 보다 더 높은 위치까지 가려면 몫 + 1.
        nReturnVal += ((nTmpDist / (A - B)) + 1);    
    }
 
    // 답 출력.
    cout << nReturnVal;
 
    return 0;
}
cs

 

문제 원본 링크:

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