백준 문제풀이/GREEDY
[Greedy] BOJ 4796 번 : 캠핑
준코딩
2019. 5. 29. 00:15
문제 보기
정말 작심삼일이라고 고작 8일하고 포기했던 1일 1백준을 다시 시작합니다...
정말 직관적이고 쉬운 문제를 풀면서 자신감을 키우기 위해 그리디문제를 가져왔습니다.
풀이
연속하는 20일중 10일을 사용할 수 있다 .... 이런 경우에 캠핑을 가장 많이 사용하기 위해서는 어떻게 해야될까요? 당연히 휴가 시작날짜부터 바로 캠핑을 시작하는 것이 가장 많이 사용하는 방법일겁니다. 그렇게 되면 휴가 28일중 첫날부터 사용하여 연속하는 20일 동안 총 10일을 사용할수 있을것입니다. 그리고 남은 8일은 다시 연속하는 20일이 되기 때문에 사용횟수가 초기화되서 8일 모두 사용할 수 있게 됩니다. 이러한 상황을 이제 코드로 구현해봅시다.
- 이러한 Case 의 번호를 저장할 변수 a 를 선언합니다.
- 연속적인 연산작업을 위해 무한루프를 구현합니다.
- L : 사용횟수 , P : 연속하는 일수 , V : 휴가 일수 를 입력받습니다.
- L ,P, V 가 모두 0인 경우 무한루프를 빠져나갑니다.
- V 를 P 로 나눈 나머지가 L 보다 큰경우 L 을 작은경우 나머지를 OP값에 저장.
- (V/P) * L 값에 이전에 구한 OP 값을 더해서 결과값에 저장한다.
- 출력.
코드
#include <iostream>
using namespace std;
int main() {
int a = 1;
while (1) {
int L, P, V;
cin >> L >> P >> V;
if (!L && !P && !V) break;
int op = (V%P) > L ? L : (V%P);
int result = (V / P) * L + op;
cout << "Case " << a++ << ": " << result << '\n';
}
return 0;
}