728x90
반응형
https://www.acmicpc.net/problem/4796
4796번: 캠핑
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다.
www.acmicpc.net
Case 1
20일의 휴가 동안 연속하는 8일 중 5일만 사용할 수 있다.
즉, 5일 사용가능 + 3일 사용불가능 + 5일 사용가능 + 3일 사용 불가능 + 남은 일수(20 - 5 - 3 - 5 - 3 = 4) = 20일이다.
Case 2
17일의 휴가 동안 연속하는 8일 중 5일만 사용할 수 있다.
즉, 5일 사용가능 + 3일 사용불가능 + 5일 사용가능 + 3일 사용 불가능 + 남은 일수(17 - 5 - 3 - 5 - 3 = 1) = 17일이다.
여기서 조심하야할 것은 남은 일 수를 무조건 더하는 것이 아니다. 만약 남은 일 수가 연속에서 사용할 수 있는 일(P)보다 크면 P를 대신 더해줘야 한다.
예를 들어 어떤 케이스에서 남은 일수가 6일이고 P가 5일이라고 하자 어차피 5일 밖에 사용하지 못한다.
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
int L, P, V;
int cnt = 0;
while (true) {
cnt++;
input = br.readLine();
StringTokenizer st = new StringTokenizer(input);
L = Integer.parseInt(st.nextToken());
P = Integer.parseInt(st.nextToken());
V = Integer.parseInt(st.nextToken());
if ((L == 0 && P == 0 && V == 0))
return;
System.out.println("Case " + cnt + ": " + (L * (V / P) + Math.min(V % P, L)));
}
}
}
위에서 설명한 경우를 하나의 식으로 표현했다.
V에서 P를 나눈 값이 뺄 수 있는 횟수이므로 그 횟수만큼 L을 곱한다.
그 후 남은 일수와 L 중 작은 수를 더해준다.
풀어쓴 코드
public static int sol(int L, int P, int V) {
int result = 0;
while (V >= P) {
V -= P;
result += L;
}
if (V < L)
result += V;
else
result += L;
return result;
}
식을 풀어쓴 코드이다. V가 P보다 크거나 같으면 L을 결과값에 더해준다.
만약 작아진다면 V와 L을 비교해 더 작은 수를 더해준다.
728x90
반응형
'코테 > JAVA' 카테고리의 다른 글
[백준 11047 / JAVA] 동전 0 (0) | 2024.01.18 |
---|---|
[백준 1449 / JAVA] 수리공 항승 (0) | 2024.01.16 |
[백준 1182 / JAVA] 부분수열의 합 (0) | 2024.01.16 |
[백준 1018 / JAVA] 체스판 다시 칠하기 (0) | 2024.01.16 |
[백준 2503 / JAVA] 숫자 야구 (1) | 2024.01.15 |