Koala - 14기/기초 알고리즘 스터디

[백준/c++] 2869번: 달팽이는 올라가고 싶다

whiteys1 2024. 4. 7. 23:19

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

 

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

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

www.acmicpc.net

문제

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

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

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

입력

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

출력

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

#include<iostream>

using namespace std;

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

    if (V == A) {
        cout << "1";
    } 
    else{
        int day = (V - A) / (A - B);
        int remainder = (V - A) % (A - B);
        if (remainder == 0) cout << day + 1; 
        else cout << day + 2;
        
    }

    return 0;
}

소스코드

첫날에 다 올라갈 수있기 때문에 이런 경우 1을 바로 출력하도록 한다. 

1일 이상 걸리는 경우들은 마지막 날은 불규칙하므로 제외하고 총 거리에서 아침에 올라간 거리에서 미끄러진 거리를 뺀 값으로 나눠준다. 즉 걸린 날 수 day를 (V-A) / (A-B) 로 설정 해둔다.

이후 마지막날은 밤에 미끄러지지 않기 때문에 따로 계산해준다. 계산하기 위해 remaider를 설정 하고 (V-A)를 (A-B)로 나눈 나머지값을 구해준다. 만약 이가 0인경우 전날 아침 딱 맞게 올라간  것이므로 day에 하루만 더하고, 이가 아닌경우 하루가 더 필요하므로 2를 더한다.