본문 바로가기
백준

[BOJ][Java] 백준 4796번: 캠핑

by 너츠너츠 2022. 7. 28.

문제 설명

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

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

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

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

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

 

문제 풀이

이 문제의 접근법은 20일 중 10일만 사용할 수 있고 28일 휴가라고 한다면 ( 28 / 20 * 10 + 남은 일수 =  V/P * L + a)입니다.

여기서 남은 일수가 핵심인데 V를 P로 나눈 나머지와 L 을 비교하여 제일 작은 수가 남은 일수입니다.

-> L: 5, V/P = 3 일 때 남은 일수는 최대 3일이므로 3을 더해야 하고 L:3, V/P=5일 때 5를 더해야 합니다.

 

풀이 코드

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));
        StringBuilder sb = new StringBuilder();

        int caseIdx = 1;

        while(true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int L = Integer.parseInt(st.nextToken());
            int P = Integer.parseInt(st.nextToken());
            int V = Integer.parseInt(st.nextToken());

            if (L == 0 && P == 0 && V == 0) break;

            int result = (V/P)*L + Math.min(V % P, L);
            sb.append("Case ").append(caseIdx).append(": ").append(result).append('\n');
            caseIdx+=1;
        }
        System.out.print(sb);
    }
}

 

<출처>

 

4796번: 캠핑

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

www.acmicpc.net

 

반응형

댓글