문제
등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만 캠핑장에는 다음과 같은 경고문이 쓰여있었다.
캠핑장은 연속하는 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 |