1 분 소요

문제

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

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

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


입력과 출력

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

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


풀이 과정

이 문제는 시간 제한이 빡빡하기 때문에 반복문을 통해 처리하면 안되고 한 번에 계산할 수 있는 규칙을 찾아야 한다.


달팽이는 하루에 낮에 A 만큼 올라가고 밤에 B 만큼 미끄러지니 (A - B)만큼 올라간다고 볼 수 있다.

하지만 달팽이가 낮에 나무막대를 다 오른다면 밤에 미끄러질 일은 없다. 그렇기 떄문에 실질적으로 달팽이가 올라가야할 높이는 (V - B)라고 볼 수 있다. (마지막 날은 미끄러지지 않으니까)

그러므로 (V - B)의 높이를 하루에(A - B)만큼 올라서 몇번 걸리는지 구하면 된다. 즉, 두 개를 나눠서 답을 구할 수 있다.

전체 코드

class Program
{
    static void Main(string[] args)
    {
        string[] s = Console.ReadLine().Split(' ');

        int A = int.Parse(s[0]);    // 올라가는 높이
        int B = int.Parse(s[1]);    // 밤에 미끄러지는 높이
        int V = int.Parse(s[2]);    // 우물 높이

        int realV = V - B;          // 실질적으로 올라가야할 높이
        int days = realV / (A - B); // 며칠이 걸리는지

        if (realV % (A - B) != 0)   // 나머지가 있을 경우 하루 더 올라가야 함
            days++;

        Console.Write(days);
    }
}

댓글남기기