https://www.acmicpc.net/problem/4796
4796번: 캠핑
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
www.acmicpc.net
문제
등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.
캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.
강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?
강산이는 조금 더 일반화해서 문제를 풀려고 한다.
캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 < L < P < V)
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
출력
각 테스트 케이스에 대해서, 강산이가 캠핑장을 최대 며칠동안 사용할 수 있는지 예제 출력처럼 출력한다.
풀이 과정
테스트 케이스의 경우를 아래의 예제로만 판단하면 에러를 범할 수 있다.
처음에는 값을 몫*L+나머지로만 판단했었다. 그렇게 되면 아래와 같은 상황이 나올 수 있다.
L,P,V가 차례로 5,8,15라고 한다면 결과값이 : 5+7=12가 된다.
15에서 8을 뺀 남은 7일 기간동안 모두를 휴가로 보낸다는 것은 오류다. 분명 연속하는 8일 기간 중에는
5일만 쓸 수 있다고 했는데 말이다.
따라서, 나머지의 값을 L과 비교하여 결과값을 도출하는 과정이 필요하다.
작성 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package greedy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ_4796 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int count=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 && P==0 && V==0) break;
int share=V/P;
int remain=V%P;
int value=0;
if(remain>L){
value=(L*share)+L;
}
else{
value=(L*share)+remain;
}
System.out.println("Case "+count+": "+value);
count++;
}
}
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1744번 : 수 묶기 (0) | 2021.11.23 |
---|---|
[백준] 1439번 : 뒤집기 (0) | 2021.11.23 |
[백준] 1715번 : 카드 정렬하기 (0) | 2021.11.22 |
[백준] 1339번 : 단어 수학 (0) | 2021.11.22 |
[백준] 13305번 : 주유소 (0) | 2021.11.22 |