silver 5. 캠핑 (4796)

|

silver 5. 캠핑 (4796)

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

문제

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

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

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

풀이

  • 아이디어: (V / P) * L + min(L, V % P)
    • min을 해주는 이유는 나머지 값보다 L의 값이 더 작을 수 있기 때문
    • 2, 8, 20의 경우, V%P의 값은 4이지만 L의 값은 2. 이럴 경우 최대 2일까지만 이용 가능
import java.util.*;
import java.io.*;

public class Main{
  public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String line = br.readLine();	// 한 줄씩 입력 받아오기
    int num = 0;

    while(!(line.equals("0 0 0"))){	// 입력받은 값이 "0 0 0"이 아닌 경우
      num ++;	// 케이스 하나 추가
      StringTokenizer st = new StringTokenizer(line);	// 입력받은 값을 나눠서 저장
      int L = Integer.parseInt(st.nextToken());
      int P = Integer.parseInt(st.nextToken());
      int V = Integer.parseInt(st.nextToken());
      
      // 최대 며칠 있을 수 있는지 계산
      int result = ((V / P) * L) + Math.min((V % P), L);
		
      // 버퍼에 값을 써줌
      bw.write("Case "+ num + ": " + result + "\n");
      
      // 다음 줄 입력 받아옴
      line = br.readLine();
    } 
    bw.flush();	// 버퍼에 있는 값을 출력한 후
    bw.close();	// 버퍼를 닫아줌
  }
}