백준 문제풀이/GREEDY

[Greedy] BOJ 4796 번 : 캠핑

준코딩 2019. 5. 29. 00:15

문제 보기


 

정말 작심삼일이라고 고작 8일하고 포기했던 1일 1백준을 다시 시작합니다...
정말 직관적이고 쉬운 문제를 풀면서 자신감을 키우기 위해 그리디문제를 가져왔습니다.

 

풀이


 연속하는 20일중 10일을 사용할 수 있다 .... 이런 경우에 캠핑을 가장 많이 사용하기 위해서는 어떻게 해야될까요? 당연히 휴가 시작날짜부터 바로 캠핑을 시작하는 것이 가장 많이 사용하는 방법일겁니다. 그렇게 되면 휴가 28일중 첫날부터 사용하여 연속하는 20일 동안 총 10일을 사용할수 있을것입니다. 그리고 남은 8일은 다시 연속하는 20일이 되기 때문에 사용횟수가 초기화되서 8일 모두 사용할 수 있게 됩니다. 이러한 상황을 이제 코드로 구현해봅시다.

 

  1. 이러한 Case 의 번호를 저장할 변수 a 를 선언합니다.
  2. 연속적인 연산작업을 위해 무한루프를 구현합니다. 
  3.  L : 사용횟수 , P : 연속하는 일수 , V : 휴가 일수 를 입력받습니다.
  4.  L ,P, V 가 모두 0인 경우 무한루프를 빠져나갑니다.
  5.  V 를 P 로 나눈 나머지가 L 보다 큰경우 L 을 작은경우 나머지를 OP값에 저장.               
  6.  (V/P) * L 값에 이전에 구한 OP 값을 더해서 결과값에 저장한다.
  7. 출력.

코드

#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;
}