본문 바로가기

Algorithm(Java)/BAEKJOON

[JAVA] 백준 알고리즘 4796번 문제 풀이 (캠핑)

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

 

4796번: 캠핑

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

www.acmicpc.net

 

소스코드

import java.io.*;
import java.util.StringTokenizer;

public class Sanizzang {
    static int cases;
    static int cnt;
    static int l;
    static int p;
    static int v;
    static int result;

    public static void main(String[] arg) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        cases = 0;
        cnt = 1;

        while (true) {
            StringTokenizer 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;

            result = (((v / p) * l)) + Math.min(l, (v % p));
            System.out.println("Case " + cnt++ + ": " + result);
        }
    }
}

 

소스설명

1. l, p, v의 값을 입력을 받는다. if(l, p, v의 값들이 다 0이라면) 반복문을 중단한다.

2. 먼저 휴가일 수인 v값을 p(연속이용)로 나눈뒤 l(캠핑장 사용일수)를 곱해준다. 

3. 그러면 v를 p의 값으로 나눈 나머지가 발생할 텐데. 여기서 남은일 수가 이용가능 일 수보다 많이 남아있을 수도 있기때문에

4. 남은 일수 vs 이용가능 일수 중 최솟값을 결과 값에 더해준다.