코디잉

4796번: 캠핑 [JAVA] 본문

자료구조&알고리즘/백준

4796번: 캠핑 [JAVA]

yong_ღ'ᴗ'ღ 2023. 8. 3. 22:33

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

 

4796번: 캠핑

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

www.acmicpc.net

 

접근 방식)

"강산이는 V일 짜리 휴가를 시작했다.

캠핑장은 연속하는 P일 중, L일 동안만 사용할 수 있다."

 

1. 캠핑장사용날 = V / P * L (→총 휴가 일수 / 연속하는 P일 중 * L일 사용 가능)

이렇게 V / P를 하고 나면, 뒤에 남는 건 두 가지 경우가 된다.

    1)  L보다 작은 경우 → 작은 값 그냥 다 넣어주면 됨 (= V % P)

    2)  L보다 큰 경우 → L 값 넣어주면 됨

    → 둘 다 어차피 L을 넘을 수는 없으니까, 둘 중 작은 값을 넣으면 된다고 생각했다.

2. 캠핑장사용날 += Math.min(V % P, L)

 

package codingTestStudy.week3;

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

public class B_4796 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int camping = 0;
        int num = 1;
        while (true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int L = Integer.parseInt(st.nextToken());   // L일 동안 사용가능
            int P = Integer.parseInt(st.nextToken());   // 연속하는 P일 중
            int V = Integer.parseInt(st.nextToken());   // V일짜리 휴가 시작

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

            /*
            * 20 / 8 = 2 → 2*5 = 10
            * 20 % 8 = 4 → 1)L보다 작은 경우 2)L보다 큰 경우
            * */
            camping = V / P * L;
            camping += Math.min(V % P, L);
            sb.append("Case " + num++ + ": " + camping + "\n");
        }
        System.out.print(sb);
    }
}
Comments