[C/C++] BOJ(백준) 4796 "캠핑" 문제 풀이

    반응형

    #문제 정보

     

    #문제분석

    간단한 문제이지만, 조심하지 않으면 실수하기 쉬운 문제이다.

    테스트케이스로 (5, 8, 20) 이 주어졌다고 가정하겠다. 총 휴가 기간(V)은 20일이고, 연속하는 8일(P)동안 캠핑장을 5일(L)동안만 사용 가능하다. 휴가기간동안 캠핑장을 최대로 이용하기 위해선 8일 중 5일을 모두 사용해야 하는것은 당연하다.

    따라서, 16일동안 캠핑장을 10일 이용한뒤, 나머지 4일을 모두 이용하면 최대 이용 기간은 14일이 된다.

     

    그런데 여기에 함정이 있다. 만약 테스트 케이스로 (3, 8, 20) 이 주어졌다고 가정해보자. 8일 중 3일을 모두 사용하면, 16일동안 6일이 사용 가능하고 나머지는 4일이 남는다. 여기서 남은 일수인 4일을 모두 더해버리면 문제의 조건 (연속하는 8일중 3일만 이용할 수 있다.) 에 위반된다. 

    그래서 나는 삼항 연산식을 이용해 나머지 일수를 다음과 같이 선언해 주었다.

    int na = V % P > L ? L : V % P;

    이 부분만 조심하면 다른 부분은 문제 없이 풀이 가능할 것이다. :)

     

    #소스코드 

    #include <iostream>
    using namespace std;
    
    int L,P,V;
    int result;
    
    int main()
    {
    	ios_base::sync_with_stdio(false); 
    	cin.tie(0);
    	
    	int cnt = 1;
    	
    	while(true){
    		cin >> L >> P >> V;	
    		
    		if (!L && !P && !V) { break; }
    		
    		int mok = V / P;
    		int na = V % P > L ? L : V % P;
    		result = mok * L + na;
    		
    		cout << "Case " << cnt << ": " << result << "\n";
    		cnt ++;
    	}
    
    	return 0;
    }

    www.acmicpc.net/problem/4796

     

    4796번: 캠핑

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

    www.acmicpc.net

    반응형

    댓글

    Designed by JB FACTORY