백준 Baekjoon

[C언어] 백준 4796 : 캠핑

sujo 2021. 3. 7. 19:08

백준 4796 : 캠핑

 

문제 링크

www.acmicpc.net/problem/4796

 

4796번: 캠핑

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

www.acmicpc.net

 

 

문제 내용

등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.

캠핑장은 연속하는 20일 중 10일 동안만 사용할 수 있습니다.

강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠 동안 사용할 수 있을까?

강산이는 조금 더 일반화해서 문제를 풀려고 한다. 

캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막V일자리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠 동안 사용할 수 있을까? (1 < L < P < V)

 

 

Idea

조건을 정리하자면

  • V : 휴가 기간
  • P : 연속하는 기간
  • L : P기간 중 사용할 수 있는 기간

이와 같이 정리할 수 있다. 문제에서는 최대 사용기간을 구하라 하였으므로 우선 V일 짜리 휴가에 P로 나눈 몫을 구한다. 그렇다면 그 몫 * L 만큼의 기간은 반드시 쓸 수 있다는 뜻이다. 

그리고 V를 P로 나눈 나머지에서 최대 캠핑장을 쓸 수 있는 기간만큼 더해주면 된다.

 

line 11

V < L ? V : L

(삼항 연산자)

휴가기간이 L보다 작다면 V를 아니라면 L을 출력한다.

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main() {
    int L, P, V, cnt;
    for (int test_case = 1;; test_case++) {
        scanf("%d %d %d"&L, &P, &V);
        if (!&& !&& !V) break;
 
        cnt = (V / P) * L;
        V = V % P;
        cnt += V < L ? V : L;
        printf("Case %d: %d\n", test_case, cnt);
    }
    return 0;
}
cs