[C/C++] BOJ(백준) 4796 "캠핑" 문제 풀이
- Archive2/ProblemSolving
- 2021. 4. 27.
반응형
#문제 정보
#문제분석
간단한 문제이지만, 조심하지 않으면 실수하기 쉬운 문제이다.
테스트케이스로 (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;
}
반응형
'Archive2 > ProblemSolving' 카테고리의 다른 글
[C/C++] BOJ(백준) 1439 "뒤집기" 문제 풀이 & 소스 코드 (0) | 2021.05.02 |
---|---|
[C/C++] BOJ(백준) 2437 "저울" 문제 풀이 (0) | 2021.04.28 |
[C/C++] BOJ(백준) 1715 "카드 정렬하기" 문제 풀이 (0) | 2021.04.27 |
[C/C++] BOJ(백준) 1080 "행렬" 문제 풀이 (0) | 2021.04.27 |
[C/C++] BOJ(백준) 10162 "전자레인지" 문제 풀이 (0) | 2021.04.25 |