[백준] 4796번 캠핑 / C++ Java

SmileJun·2025년 3월 4일

알고리즘

목록 보기
13/34

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

C++

#include<iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int P,L,V; int test = 1;
    while(true) {
        int total = 0;
        cin >> L >> P >> V;
        if(L==0 && P==0 && V==0) {
            break;
        }
        int a = V / P; int b = V % P;
        if(L < b) {
            total += L * a + L;
        }
        else{
            total += L * a + b;
        }
        cout << "Case " << test << ": " << total << endl;
        test++;
    }
}

Java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int num = 1;
        StringTokenizer st;

        while(true) {
            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 a = (V / P) * L;
            int b = (V % P);
            if(L < b) {
                bw.write("Case " + num + ": " + (a + L) + "\n");
            }
            else {
                bw.write("Case " + num + ": " + (a + b) + "\n");
            }
            num++;
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

문제풀이

  • 총 V일 휴가 중에서, 연속하는 P일 중, L일만 사용할 수 있다. L,P,V 순으로 예시를 들어보자면 (5,8,20) 일 때는 8일차 중 5일, 16일 차 중 5+5 = 10일, 20일 차 중 5+5+나머지 4 = 14일로 총 14일 사용할 수 있다. (3,8,20)의 경우 8일차 중 3일, 16일차 중 3일, 20일 차 중 3+3+ (나머지가 아닌 최대 3일) = 9일로 총 9일 사용할 수 있다. 두 예시에서 알 수 있듯이 V/P 값과 L값을 곱하고, V%P 값과 L 값을 비교해서, 더 작은 값을 더하면 된다.

Comment

  • Java 코드에서, 지금까지는 여러 수를 입력받을 때 String[] input = br.readLine().split(" ") 이런식으로 썼는데, StringTokenizer 클래스를 사용하면 더욱 더 효율적으로 여러 수를 입력받을 수 있다는 것을 알게됐다.
profile
하루하루는 성실하게, 인생 전체는 되는대로

0개의 댓글