알고리즘
백준 15720번 카우버거 (JAVA)
박카스마시며코딩
2023. 10. 1. 20:27
https://www.acmicpc.net/problem/15720
15720번: 카우버거
첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000) 둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진
www.acmicpc.net
저는 정렬을 통해 문제를 해결하였습니다.
먼저 버거 사이드 음료를 정렬하고 각각의 개수의 최소값을 구합니다.
각각 그만큼만 10퍼센트 세일해 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_15720 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Function<String,Integer> stoi = Integer::parseInt;
StringTokenizer st = new StringTokenizer(br.readLine());
int buggerCnt = stoi.apply(st.nextToken());
int sideCnt = stoi.apply(st.nextToken());
int drinkCnt = stoi.apply(st.nextToken());
int[] bugger = new int[buggerCnt];
int[] side = new int[sideCnt];
int[] drink = new int[drinkCnt];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < buggerCnt ; i++){
bugger[i] = stoi.apply(st.nextToken());
}
Arrays.sort(bugger);
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < sideCnt ; i++){
side[i] = stoi.apply(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < drinkCnt ; i++){
drink[i] = stoi.apply(st.nextToken());
}
Arrays.sort(bugger);
Arrays.sort(side);
Arrays.sort(drink);
int[] result = cal(bugger,side,drink,buggerCnt,sideCnt,drinkCnt);
System.out.println(result[0]);
System.out.println(result[1]);
}
private static int[] cal(int[] bugger, int[] side, int[] drink, int buggerCnt, int sideCnt, int drinkCnt) {
int min = Math.min(buggerCnt,sideCnt);
min = Math.min(min,drinkCnt);
int sum = 0;
int saleSum = 0;
for(int i = buggerCnt-1 ; i >= 0 ; i--){
sum += bugger[i];
if(i >= buggerCnt - min){
saleSum += bugger[i] * 0.9;
}else{
saleSum += bugger[i];
}
}
for(int i = sideCnt-1 ; i >= 0 ; i--){
sum += side[i];
if(i >= sideCnt - min){
saleSum += side[i] * 0.9;
}else{
saleSum += side[i];
}
}
for(int i = drinkCnt-1 ; i >= 0 ; i--){
sum += drink[i];
if(i >= drinkCnt - min){
saleSum += drink[i] * 0.9;
}else{
saleSum += drink[i];
}
}
return new int[]{sum,saleSum};
}
}