코딩테스트/JavaScript
[코딩테스트] 졸업 선물
CODE_PLAN
2023. 12. 27. 21:44
나의 풀이
function solution(m, product) {
let answer = 0;
let n = arr[0].length;
let min = Number.MIN_SAFE_INTEGER;
let reverse = arr.sort();
console.log('reverse=' + reverse)
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < n; j++) {
}
}
}
let arr = [[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
// [0,0],[0,1], [1,0], [1,1],[2,0],[2,1],
console.log(solution(28, arr));
console.log('arr=?' + arr[0].length)
</script>
우선 나는 이런식을 풀려고했고 문제 구상및 이해는 다 되었었다.
근데 이걸 코드로 구현하는게 아직 미흡해서 제한시간이 지난후 답을 보게되었다.
모범 정답
<script>
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));
</script>
풀이 핵심 1) if(j!==i && (product[j][0]+product[j][1])>money) break;
위 코드는 money보다 금액이 클경우를 막아주기 위한 코드로서 적어야 쓸데없는 동작을 안한다.
2) sort에서 나는 a,b만 적어주고 식이 없었는데 (a[0]+a[1])-(b[0]+b[1]) 이런식으로 구체적으로 적어줘야 값이 잘 정렬된다.