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

Develop My Life·2022년 2월 22일
0

PS

목록 보기
8/32
post-thumbnail

문제

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

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

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

입력

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

출력

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

첫번째 시도

#include <iostream>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int day;
    int A, B, V;
    cin >> A >> B >> V;
    V = V - A; //낮동안 올라갈 수 있는 거리를 전체 막대기에서 뺀다.
    day = V / (A - B); //낮과 밤을 합쳐서 올라 갈 수 있는 거리를 막대기에서 나누어 필요한 일수를 구한다.
    day += 1; //그 다음 낮이 필요하기 때문에 하루를 더한다.
    cout << day << '\n';

    return 0;
}

⭐ 이 경우 5 1 15가 반례가 된다. 이유는 전체 막대기에서 낮동안 갈 수 있는 거리를 뺀 거리를 낮과 밤동안 갈 수 있는 거리로 나누는 방식으로 일수를 구했는데 이 때 깔끔하게 떨어지지 않고 나머지가 생기는 경우가 있다. 이러한 경우에는 하루가 더 소모된다.

정답 풀이

//시작 11:32
//끝 11:45
//반례 5 1 15
#include <iostream>

using namespace std;



int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int day;
    int A, B, V;
    cin >> A >> B >> V;
    V = V - A; //낮동안 올라갈 수 있는 거리를 전체 막대기에서 뺀다.
    day = V / (A - B); //낮과 밤을 합쳐서 올라 갈 수 있는 거리를 막대기에서 나누어 필요한 일수를 구한다.
    if (V % (A - B) != 0) {//반례 고려
        day += 1;
    }
    day += 1; //그 다음 낮이 필요하기 때문에 하루를 더한다.
    cout << day << '\n';

    return 0;
}

⭐ 나머지가 생기는 경우 하루를 추가하여 일수를 계산해주었다.

0개의 댓글