www.acmicpc.net/problem/4796

 

4796번: 캠핑

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

www.acmicpc.net

이 문제를 처음보면 무슨말인지 이해가 잘 가지 않았다.

그래서 문제를 또읽고 읽어보니 어떻게 풀면 되겠구나 하는 포인트를 잡았다.

캠핑장은 20일 중 10일만 사용할 수 있다.

 

10일 사용 10일 미사용 (총20일) 이때 휴가는 28일 이니 8일을 더 쓸 수 있다.

총 18일 사용가능하다.

 

식으로 해보면 28/20*10 == V/P*L 만큼의 일수가 사용가능하고

28%20 = 8 만큼의 일수를 더 사용할 수 있다.

그렇게 코딩을 하였더니 문제가 생겼다.

 

나머지 값이 L값보다 큰 경우의 수를 놓쳤다.

5일만 사용가능, 연속하는 8일 휴가는 15일 이라고 생각해보자

15/8*5 = 5일

15%8 = 7일 

5+7 =12일? 

아니다!

5일사용 3일미사용 5일사용 3일미사용(16일) 이미 휴가 리미트를 넘어버린상황에서 10일을 사용가능하다.

삼항 연산자를 이용하여 나머지값보다 큰 경우 L값만 더해주는 식으로 코딩했다!

package test;

import java.util.Scanner;
public class test {

	public static void main(String[] args) {
	       Scanner sc = new Scanner(System.in);
	        
	       int testc = 1;
	       int L,P,V;
	       while(true) {
	    	  L = sc.nextInt();
	    	  P = sc.nextInt();
	    	  V = sc.nextInt();
	    	  
	    	  if(L==0&&P==0) {
	    		 break;
	    	  }
	    	  int ex = (V%P) > L ? L : V%P;
	          int day = (V / P)*L + ex;
	    	  System.out.println("Case "+testc+": "+ day);
	    	  testc++;
	       }
	        
	        
	}
}

+ Recent posts