티스토리 뷰

Problem Solving/백준 온라인 저지

4796-캠핑

developer0hye 2020. 9. 12. 00:35

www.acmicpc.net/problem/4796

 

4796번: 캠핑

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

www.acmicpc.net

본 문제는 입력받은 휴가 일수 V캠핑장의 연속 운영 일수 P, 캠핑장의 사용 가능 일수 L 간의 관계성을 찾으면 쉽게 모델링하여 해결할 수 있는 문제였습니다.

 

강산이가 캠핑장을 최대로 이용할 수 있는 일수를 Y 라 할때, Y 는 아래의 수식으로 부터 계산될 수 있습니다.

 

Y = (V / P) x L + min(% P, L) (1)

(V / P) 의 결과는 정수형이다.

 

예시로 들어 설명하면 강산이의 휴가 일수가 20(=V), 캠핑장의 연속 운영 일수가 8(=P), 캠핑장의 사용 가능 일수가 5(=L) 일 때,

 

휴가 일수 20일동안 강산이는 캠핑장을 최대 3번 방문 가능합니다. 캠핑장이 강산이의 휴가 시작 일자부터 오픈한다 했을때, 강산이는 휴가 시작 일자부터 8일, 그 이후로 8일, 마지막으로 남은 4일 이렇게 3번 캠핑장을 방문할 수 있습니다. 그중 첫 방문한 8일 중 5일, 두번째 방문한 8일 중 5일, 마지막에 방문할때 4일간 캠핑장을 이용할 수 있으므로 정답은 14일이 됩니다.

 

수식 (1) 과 위 설명을 비교해보면 첫항인  (V / P) x L 로부터 강산이가 캠핑장을 첫 방문했을때와 두번째 방문했을때의 이용 일수를 모두 합한 10일이 계산되고, 두번째 항인 min(% P, L) 로부터 마지막에 캠핑장을 방문했을때의 이용 일수인 4가 계산되는 것입니다.

코드

#include <iostream>
using namespace std;

int main()
{


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

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int c=1;
    while(true)
    {
        int L;
        int P;
        int V;
        cin >> L >> P >> V;

        if(L == 0 && P ==0 && V == 0)break;

        int rent_day = int(V/P)*L + min(V%P, L);
        cout << "Case " << c++ << ": "<< rent_day << '\n';
    }

    return 0;
}

'Problem Solving > 백준 온라인 저지' 카테고리의 다른 글

17780-새로운 게임  (0) 2020.09.17
17825-주사위 윷놀이  (0) 2020.09.13
1793-타일링  (0) 2020.09.11
3197-백조의 호수  (0) 2020.09.11
1562-계단 수  (0) 2020.09.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함