졸업 선물 (완전탐색)
문제: 학생들이 각자 선물가격, 배송비를 적어서 냈고, 선생님은 한정된 예산을 가지고 최대한 많은 학생에게 선물을 사주고 싶다. 선생님은 하나의 선물가격을 반값에 살 수 있는 쿠폰을 가지고 있다.(배송비X) 최대 학생수를 출력하라. (2차원 배열)
고민했던 점
-선물가격과 배송비를 합친 금액을 오름차순으로 정렬하고 싶었는데 합친 금액을 임시배열에 넣고 정렬하면 반값 선물가격금액을 뺄 수가 없음. 그럴려면 2차원 배열을 정렬해야하는데 그건 방법을 모름...
-선물가격이 제일 비싼 걸 반값으로 해야하나, 하나하나를 다 시도 해야하나, sum변수에 들어가있는 걸 하나씩 반값을 빼보고 다음 선물을 살 수 있을때까지 시도해보고 안되면 제일 비싼거 빼고....어흑ㅠㅠ..2중 for문인 건 알겠는데 변수를 썼다 지웠다 썼다 지웠다... 아무튼 말로 다 할 수 없는 어려움이었다. 결국 못 품...
function solution(m, product){
let answer=0;
let n=product.length;
product.sort((a, b) => (a[0]+a[1])-(b[0]+b[1]));
for(let i=0; i<n; i++){
let money=m-(product[i][0]/2+product[i][1]);
let cnt=1;
for(let j=0; j<n; j++){
if(j!==i && (product[j][0]+product[j][1])>money) break;
if(j!==i && (product[j][0]+product[j][1])<=money) {
money-=(product[j][0]+product[j][1]);
cnt++;
}
}
answer=Math.max(answer, cnt);
}
return answer;
}
let arr=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
console.log(solution(28, arr));