728x90
728x90
https://www.acmicpc.net/problem/4796
난이도: 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;
}
반응형