[백준] 2869번 달팽이는 올라가고 싶다 C++ 문제 풀이 수학 1

2020. 1. 21. 12:09알고리즘/백준

728x90
반응형

문제

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

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

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

입력

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

출력

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


예제 입력 1

2 1 5


예제 출력 1

4


문제 풀이

#include <iostream>

using namespace std;

int main() {
    int A, B, V;
    cin>>A>>B>>V;
    if(A == V)
        cout<<1;
    else{
        int answers = 0;
        int C = V-A;
        int D = A-B;
        int E = C/D;
        if((double)E != (double)C/(double)D)
            answers = E+2;
        else
            answers = E+1;
        
        cout<<(int)answers;
    }
}

달팽이의 동작은 올라가거나 내려오거나 두 가지이고,

올라가고 내려오고 사이클을 반복하다 올라가는 시점에서 목적지에 도달하게 됩니다.

for 문으로 풀면 시간 초과가 뜹니다.

 

C는 마지막 올라가기 전 사이클이 끝나는 최소 높이입니다.

D는 사이클 후 올라간 높이입니다.

E는 사이클 반복 횟수입니다.

 

E와 C/D가 같으면 딱 나누어떨어진 경우이므로 한 번만 더 올라가면 내려감 없이 V에 도달하게 됩니다.

같지 않은 경우는 사이클을 한 번 더 수행 후 올라가야 V에 도달하게 됩니다.

 

따라서 1과 2를 각각 더하였습니다.

 

 

 

 

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

 

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

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

 

728x90
반응형