[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