-
[백준/BOJ] 4796번 캠핑 (C++)알고리즘 문제풀이/백준 2021. 9. 13. 16:35
https://www.acmicpc.net/problem/4796
문제는 매우 간단하다. 일단 L = 5, P = 8, V = 20을 예시로 들어보겠다.
1 2 3 4 5 6 7 8 | 9 10 11 12 13 14 15 16 | 17 18 19 20
일단은 P의 크기만큼 V의 구간을 나눠준다. 그럼 8의 크기 구간 2개와 나머지 남은 구간 1개가 나온다. 해당 구간에서 캠핑장을 사용할 수 있는 날짜는 연속된 5일, 진하게 표시된 부분이다. 즉, V를 P로 나눈 몫에서 곱하기 L을 하고, 나머지 V를 P로 나누고 남은 나머지를 더해주면 캠핑장을 최대 며칠 사용할 수 있는지 구할 수 있는 것이다.
그러나 위의 조건만으로는 반례가 존재한다. L = 2, P = 7, V = 10을 예시로 살펴보자.
1 2 3 4 5 6 7 | 8 9 10
P의 크기만큼 V의 구간을 나눠주면 7의 크기 구간 1개와 나머지 남은 구간 1개가 나온다. 역시나 캠핑장을 사용할 수 있는 날짜는 진하게 표시된 부분이다. 여기서 8 9 10 구간을 주목하자. V % P(3)의 값이 L(2)보다 큰 것을 확인할 수 있다. 따라서 예외처리를 해줘야한다. V % P의 값이 L보다 클때는 L을 더하게끔 구현을 하면 문제를 해결할 수 있다.
#include <iostream> #include <algorithm> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int idx = 1; while(1) { int L, P, V; cin >> L >> P >> V; if(L == 0 && P == 0 && V == 0) break; if(V % P > L) cout << "Case " << idx++ << ": " << (V / P) * L + L << "\n"; else cout << "Case " << idx++ << ": " << (V / P) * L + (V % P) << "\n"; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 1931번 회의실 배정 (C++) (0) 2021.09.13 [백준/BOJ] 12845번 모두의 마블 (C++) (0) 2021.09.13 [백준/BOJ] 13458번 시험 감독 (C++) (0) 2021.09.12 [백준/BOJ] 2217번 로프 (C++) (0) 2021.09.12 [백준/BOJ] 11399번 ATM (C++) (0) 2021.09.12