티스토리 뷰
https://www.acmicpc.net/problem/4796
# 문제 분류
그리디 알고리즘
풀이 접근 방법 :
1. 캠핑을 오래 하기 위해서는
2. 휴가가 시작하자마자 캠핑을 가서
3. 최대치를 채우면 쉬고 다시 가면 된다. 구현해보자.
남은 휴가일 수 V가 연속 P일 중 가능일 수 L보다 크거나 같다면, 가능일 수 L만큼 모두 캠핑을 즐길 수 있는 것이다. -> res += L
그렇지 않다면, 가능일 수 L을 채울만큼 V가 남지 않았다는 말이므로, 그래도 V만큼은 캠핑을 갈 수 있다. -> res += V
이러한 연산의 주기는 '연속 P일 중' 가능일 수 L이기 때문이므로, 휴가일에서는 P를 빼준다.
다음 loop에서는 V가 양수인지 아닌지만 판단해주면 된다. 더 이상 휴가가 남지 않을 때까지 돌려준다.
|
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int L, P, V, cnt = 1, res;
int main() {
while (1) {
cin >> L >> P >> V;
res = 0;
if (L == 0) break;
else {
while (V > 0) {
if (V >= L) res += L;
else res += V;
V -= P;
}
cout << "Case " << cnt++ << ": " << res << endl;
}
}
return 0;
}
|
cs |
'Problem Solving > BOJ Solution' 카테고리의 다른 글
| BOJ #1753 - 최단경로 (0) | 2019.10.01 |
|---|---|
| BOJ #4307 - 개미 (0) | 2019.07.29 |
| BOJ #1449 - 수리공 항승 (0) | 2019.07.28 |
| BOJ #11000 - 강의실 배정 (0) | 2019.07.28 |
| BOJ #1700 - 멀티탭 스케줄링 (0) | 2019.07.28 |
