4796번: 캠핑
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
www.acmicpc.net
이 문제를 처음보면 무슨말인지 이해가 잘 가지 않았다.
그래서 문제를 또읽고 읽어보니 어떻게 풀면 되겠구나 하는 포인트를 잡았다.
캠핑장은 20일 중 10일만 사용할 수 있다.
10일 사용 10일 미사용 (총20일) 이때 휴가는 28일 이니 8일을 더 쓸 수 있다.
총 18일 사용가능하다.
식으로 해보면 28/20*10 == V/P*L 만큼의 일수가 사용가능하고
28%20 = 8 만큼의 일수를 더 사용할 수 있다.
그렇게 코딩을 하였더니 문제가 생겼다.
나머지 값이 L값보다 큰 경우의 수를 놓쳤다.
5일만 사용가능, 연속하는 8일 휴가는 15일 이라고 생각해보자
15/8*5 = 5일
15%8 = 7일
5+7 =12일?
아니다!
5일사용 3일미사용 5일사용 3일미사용(16일) 이미 휴가 리미트를 넘어버린상황에서 10일을 사용가능하다.
삼항 연산자를 이용하여 나머지값보다 큰 경우 L값만 더해주는 식으로 코딩했다!
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int testc = 1;
int L,P,V;
while(true) {
L = sc.nextInt();
P = sc.nextInt();
V = sc.nextInt();
if(L==0&&P==0) {
break;
}
int ex = (V%P) > L ? L : V%P;
int day = (V / P)*L + ex;
System.out.println("Case "+testc+": "+ day);
testc++;
}
}
}
'알고리즘 with 자바 > 그리디' 카테고리의 다른 글
백준 10162 : 전자레인지 - JAVA (0) | 2021.03.17 |
---|---|
백준 2217 : 로프 - JAVA (0) | 2021.03.17 |
백준 1541 : 잃어버린 괄호 - JAVA (0) | 2021.03.16 |
백준 5585 : 거스름돈 - JAVA (0) | 2021.03.16 |
백준 11047 : 동전 0 - JAVA (0) | 2021.02.16 |