[백준] 4796번: 캠핑 (C언어)

728x90
728x90

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

 

4796번: 캠핑

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.

www.acmicpc.net

난이도: solved.ac 브론즈 1

 

 

예제 입력 1 중 첫 번째 case를 예시로 문제 해설을 해보겠다

 

L = 5, P = 8, V = 20 일 때는

 

연속으로 8일 중 5일 캠핑장 사용이 가능하고 휴가는 20일이므로

 

먼저 큰 틀 P만큼 휴가 20일을 쪼갠다

 

그러면 아래와 같이 된다

 

8일 8일 4일

 

위의 두 번의 8일에서 각각 5일씩 캠핑장 사용을 하면

 

캠핑장을 10일 사용할 수 있다

 

그리고 최대 5일 연속 캠핑장 사용이 가능하므로

 

나머지 4일도 캠핑장 사용이 가능하다

 

따라서 10 + 4 = 14일 캠핑장 사용이 가능하다

 

 

그렇다면 L = 2, P = 6, V = 23 인 경우는 어떨까

 

똑같이 V를 P로 쪼개보자

 

6일 6일 6일 5일

 

위와 같이 된다

 

일단 위 세 개의 6일 동안 캠핑장을 2일씩 사용할 수 있으므로

 

3 * 2 = 6일 캠핑장 이용이 가능하다

 

그리고 남은 5일에서도 최대 2일 캠핑장 이용이 가능하므로

 

6 + 2 = 8로 총 8일 캠핑장 사용이 가능하다

 

이를 코드로 나타내면 아래와 같다

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
	int L, P, V;
	int avail = 0, case_num = 1;
	while (1) {
		scanf("%d %d %d", &L, &P, &V);
		if (L == 0 && P == 0 & V == 0) break;
		else {
			avail += (V / P) * L;
			if (V % P <= L)		// 본문 첫 번째 예시인 경우
				avail += V % P;
			else	// 본문 두 번째 예시인 경우
				avail += L;
		}
		printf("Case %d: %d\n", case_num, avail);
		case_num++;
		avail = 0;		// 초기화
	}
	return 0;
}
반응형