백준 #4796 캠핑


BOJ #4796 - 캠핑

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

# 문제 분류

그리디 알고리즘

풀이 접근 방법


  1. 캠핑을 오래 하기 위해서는
  2. 휴가가 시작하자마자 캠핑을 가서
  3. 최대치를 채우면 쉬고 다시 가면 된다. 구현해보자.

남은 휴가일 수 V가 연속 P일 중 가능일 수 L보다 크거나 같다면,
가능일 수 L만큼 모두 캠핑을 즐길 수 있는 것이다. → res += L
그렇지 않다면, 가능일 수 L을 채울만큼 V가 남지 않았다는 말이므로, 그래도 V만큼은 캠핑을 갈 수 있다. → res += V
이러한 연산의 주기는 '연속 P일 중' 가능일 수 L이기 때문이므로, 휴가일에서는 P를 빼준다.
다음 loop에서는 V가 양수인지 아닌지만 판단해주면 된다. 더 이상 휴가가 남지 않을 때까지 돌려준다.

소스 코드


#include <iostream>
#include <algorithm>

using namespace std;

int L, P, V, cnt = 1, res;

int main() {
    while (1) {
        cin >> L >> P >> V;
        res = 0;

        if (L == 0) break;
        else {
            while (V > 0) {
                if (V >= L) res += L;
                else res += V;
                V -= P;
            }

            cout << "Case " << cnt++ << ": " << res << endl;
        }
    }

    return 0;
}