• [백준OJ] 4796번 캠핑

    2021. 7. 3.

    by. Hyeon-Uk

    반응형

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

     

    4796번: 캠핑

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

    www.acmicpc.net


     

    -풀이-

    문제에 나온 예시를 먼저 보자.

    20일동안 연속되는 날중 10일만 사용할 수 있고, 방금 28일 휴가를 떠났을때 최대 사용가능한 날을 구해보자.

    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 32 33 34 35 36 37 38 39 40

    파란색이 이용가능한 날이고, 빨간색은 이용이 불가능한 날이다. 따라서 최대 18일을 이용할 수 있다는것이다.

     

    하나하나 살펴보자.

    처음 1일~20일중 강산이는 연속되는날중 10일을 사용할 수 있다. 따라서 1~20중 연속되는 10일을 사용가능하다.

    다음 21~40일중 강산이는 연속되는 날 중 10일을 사용 할 수 있다. 하지만 강산이는 28일날까지 휴가이므로, 강산이가 최대로 사용을 하기 위해선, 21~30까지 캠핑장을 사용해야, 21~28일까지 총 8일을 더 이용할 수 있게된다.

    따라서 최대 18일동안 이용이 가능하다.

     

    8일동안 연속되는 날 중 5일만 사용할 수 있고, 방금 20일의 휴가를 떠났을때의 경우를 구해보자.

    1 2 3 4 5 6 7 8
    9 10 11 12 13 14 15 16
    17 18 19 20 21 22 23 24

    위와같이 따져보자.

    처음 1~8일중 강산이는 최대 5일을 사용할 수 있다.

    9~16중 강산이는 최대 5일을 사용할 수 있다.

    17~24중 강산이는 총 5일을 사용할 수 있다. 하지만 강산이는 20일까지 휴가이므로, 17~21동안 사용을 한다고 해야 최대 4일을 사용할 수 있다.

    따라서 강산이는 총 14일을 사용할 수 있게된다.

     

    규칙이 보이는가?

    캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 라고할때

    V/P 만큼의 묶음은 최대 L일을 모두 사용할 수 있다.

    나머지 날짜인 V%P 일동안 최대 사용할 수 있는 날은, V%P가 L일보다 작다면, 남은 날짜인 V%P일이 최대가 되는것이고, V%P가 L일보다 크다면, 최대 L일 사용할 수 있게되는것이다.

     

    -시간복잡도-

    단순 계산식이므로, 테스트케이스가 T개라고 한다면 O(T)가 된다.

     

    -코드-

    #include <iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    int main() {
    	ios_base::sync_with_stdio(false);
    	cin.tie(NULL);
    	cout.tie(NULL);
    	int l, p, v;
    	int n = 1;
    	while (true) {
    		cin >> l >> p >> v;
    		if (!l && !p && !v) {
    			break;
    		}
    
    		int result = (v / p)*l;
    		v %= p;
    		result += (l < v ? l : v);
    		cout << "Case " << n << ": " << result << "\n";
    		n++;
    	}
    }
    
    반응형

    '문제풀이 > 백준oj' 카테고리의 다른 글

    [백준OJ] 11055번 가장 큰 증가 부분 수열  (0) 2021.07.05
    [백준OJ] 2293번 동전 1  (0) 2021.07.04
    [백준OJ] 1535번 안녕  (0) 2021.07.03
    [백준OJ] 1339번 단어 수학  (0) 2021.07.02
    [백준OJ] 1789번 수들의 합  (0) 2021.07.02

    댓글