새벽코딩

[백준] [4796] 캠핑 (그리디) (JAVA) 본문

알고리즘

[백준] [4796] 캠핑 (그리디) (JAVA)

J 코딩 2023. 2. 10. 23:52
반응형

https://www.acmicpc.net/problem/4796

4796번: 캠핑

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

www.acmicpc.net


문제

등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.

캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.

강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?

강산이는 조금 더 일반화해서 문제를 풀려고 한다. 

캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)

입력

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

출력

각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.

예제 입력 1 복사

5 8 20
5 8 17
0 0 0

예제 출력 1 복사

Case 1: 14
Case 2: 11

※ JAVA 코드 (캠핑)

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		int result = 0;
		int idx = 1;
		
		while(true) {
			st = new StringTokenizer(br.readLine());
			int L = Integer.parseInt(st.nextToken());
			int P = Integer.parseInt(st.nextToken());
			int V = Integer.parseInt(st.nextToken());
			
			result = 0;
			
			if(L == 0 && P == 0 && V == 0) {
				break;
			}
			
			result += ((V / P) * L) + ((V % P) >= L ? L : (V % P));
			
			System.out.println("Case " + idx + ": " + result);
			
			idx++;
		}
	}
}

※ 생각정리 (캠핑)
캠핑 문제는 간단한 수식으로 그 해답을 찾을 수 있었다.
1. 총 휴가 일수에서 캠핑장일수의 기준인 P를 나눈값에 한번의 캠핑을 연속으로 할 수 있는 최대 일수 L을 곱한다.
2. V에서 P를 나누고 남은 나머지수는 한번에 캠핑을 할 수 있는 수보다 크거나 작을 것이다.
3. 대소 비교를 하여 더 작은 값을 더해주면 총 캠핑일 수를 구할 수 있다.
 
그리디문제는 간단하지만, 수식을 찾아내는것이 필요하다. 더 난이도 높은 그리디 문제를 접해볼것이다.
 
요즘 자격증공부를 하느라 포스팅을 잘 못하고 있습니다...
매일 새벽까지 자격증 공부를 한 후에 알고리즘 문제를 풀기에는 체력이 안되나봐요.. 
그래도 알고리즘 문제풀이는 저의 몇가지 취미중 하나이므로 시간이 날 때마다 짬짬히 문제풀이를 이어나갈 생각입니다.
 
-새벽코딩-

반응형
Comments