문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
어떤 사람이 주어진 예산으로 가장 비싸게 키보드와 USB를 사길 원한다. 키보드와 USB, 예산이 주어졌을 때, 구입할 수 있는 비용을 구해라. 만약 둘 다 못 살 경우, -1을 반환해라.
b = 60;
keyboards = [40, 50, 60]
drives = [5, 8, 12]
그 사람은 40 Keyboard + 12 USB = 52 또는 50 Keyboard + 8 USB를 살 수 있다. 더 비싼 옵션을 선택하고 58을 반환한다.
getMoneySpent 함수를 완성해라.
getMoneySpent 함수는 아래와 같은 매개변수를 가지고 있다.
반복문을 사용하여 해결했다. 먼저 keyboards와 drives를 정렬한다.
Arrays.sort(keyboards);
Arrays.sort(drives);
result를 Integer로 선언한다. 가장 비싼 가격끼리 합해도 Integer 범위이다. 그리고 result에 각 index 0을 합해서 할당한다.
int result = keyboards[0] + drives[0];
result가 b보다 크면 -1을 반환한다. 이미 keyboards와 drives를 정렬해두었기 때문에 가장 작은 keyboard와 drives의 합이어서 가능하다.
if(result > b) return -1;
그리고 반복문을 사용해 sum을 구한 뒤 result보다 큰지, b보다 작거나 같은지를 비교해주고 맞다면 sum을 result에 할당한다.
for(int i = 0; i < keyboards.length; i++){
for(int j = 0; j < drives.length; j++){
int sum = keyboards[i] + drives[j];
if(sum > result && sum <= b){
result = sum;
}
}
}
마지막으로 result를 반환한다.
return result;
static int getMoneySpent(int[] keyboards, int[] drives, int b) {
Arrays.sort(keyboards);
Arrays.sort(drives);
int result = keyboards[0] + drives[0];
if(result > b){
return -1;
}
for(int i = 0; i < keyboards.length; i++){
for(int j = 0; j < drives.length; j++){
int sum = keyboards[i] + drives[j];
if(sum > result && sum <= b){
result = sum;
}
}
}
return result;
}