[BaekJoon/Java] 백준 4796 캠핑

김시현 Si Hyeon, Kim·2022년 1월 4일
0

Algorithm

목록 보기
6/9
post-custom-banner

문제 요약 설명

강산이가 휴가를 써서 캠핑을 하려고 하는데, 캠핑장은 연속되는 P일 중에 L일만 캠핑이 가능하다는 조건이 존재한다. 이 때, 강산이가 V일수 만큼의 휴가를 보낸다면 캠핑을 할 수 있는 일수의 최댓값을 구해라.

아이디어

입력으로 L(캠핑을 할 수 있는 일 수), P(캠핑장의 조건 일 수), V(강산이의 휴가 기간)이 주어질 때, 최대로 캠핑을 많이 하기 위해서는 V기간동안 L을 최대한 많이 보내야한다.

하지만 L기간을 보낸다면 결국 P기간 만큼 캠핑장을 사용할 수 없기 때문에, L기간을 최대한 많이 사용한다는 말은 결국 V기간안에 P를 몇번 보낼 수 있는지와 같다.
그래서 V를 P로나누고 나온 횟수에 P기간동안 사용할 수 있는 캠핑장 일 수인 L을 곱해주면 된다.

하지만 V를 P로 나누고 난 나머지가 존재하기 때문에 이 나머지 일 수를 처리해야 하는데,
남은 일 수가 만약 L"초과"라면 캠핑장에서 연속으로 사용할 수 있는 기간이 L로 제한되어 있기 때문에 L을 더해주고,
남은 일 수가 L"이하"라면 캠핀장에서 연속으로 사용할 수 있는 기간에 전혀 문제가 되지 않기 때문에 나머지 값을 더해주는 식으로 풀 수 있다.

풀이

  1. 먼저 V를 P로 나누고 L을 곱한 수를 camping에 저장한다.
  2. V를 P로 나누고 난 나머지를 L과 비교한다.
  3. 초과이면 L을 camping에 더하고 이하이면 나머지값을 camping에 더한다.
  4. camping 변수를 출력 예제에 맞게 출력한다.
  5. 만약 L, P, V가 전부 0이 들어오면 반복문을 탈출하고 프로그램을 종료한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        int i = 0, L = 0, P = 0, V = 0, cnt = 0;
        while(true) {
            st = new StringTokenizer(br.readLine());
            L = Integer.parseInt(st.nextToken());
            P = Integer.parseInt(st.nextToken());
            V = Integer.parseInt(st.nextToken());

            if(L == 0 && P == 0 && V == 0) break;
            else {
                cnt++;
                int camping = V / P * L;
                int mod = V % P;
                if(mod > L) camping += L;
                else if(mod <= L) camping += mod;
                System.out.println("Case " + cnt + ": " + camping);
            }
        }
        br.close();
    }
}
profile
최악의 환경에서 최선을 다하자!!
post-custom-banner

0개의 댓글