알고리즘

백준 No.4796 캠핑- JAVA

jaewoo 2023. 4. 7. 15:31

문제

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

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

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

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

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

 

 

풀이

L 5 P 8 V 20 이다

처음에 그냥 20/8하고 해당 값 곱하기 L을 한다음 나머지를 더했는데 이러면 안되었던게 V%P 값이 L보다 클 수 있다. 그니깐 주어진 5값이 20을 8로 나눈 나머지 값보다 작을 수 있다는 소리다. 그렇게 되면 연속되는 값이 5일 이상이 되어버려서 틀린다. 그래서 해당 조건을 걸어줘야한다.

if(V%P > L) 해당 경우는 그냥 나머지를 무시하고 L을 더해버리면 된다.

if(V%P < L) 해당 경우는 L만큼 어짜피 못 가기에 나머지 값을 더해버리면 된다.

 

 



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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int index = 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) break;

            int temp;

            if(V%P > L){
                temp = (V/P) * L + L;
            }else{
                temp = (V/P) * L + V%P;
            }
            sb.append("Case "+index++).append(": ").append(temp).append("\n");

        }

        System.out.println(sb.toString());


    }
}

'알고리즘' 카테고리의 다른 글

백준 No.1058 친구- JAVA  (0) 2023.04.12
백준 No.4963 섬의 개수- JAVA  (0) 2023.04.08
백준 No.9012 괄호- JAVA  (0) 2023.04.06
백준 No.10816 숫자카드2- JAVA  (0) 2023.04.04
백준 No.10815 숫자카드- JAVA  (0) 2023.04.03