📄문제



✏️풀이
재영
const getSortArray = (arr , func = undefined) => { return arr.sort(func); }; const binarySearch = (arr, budget) => { // idx -> 이분탐색 let left = 0; let right = arr.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); const total = arr .slice(0, mid + 1) .reduce((arr, cur) => arr + cur, 0); if (total === budget) return mid + 1; // 최대 해가 항상 같을 때가 아닐 때 if (total < budget) left = mid + 1 else right = mid - 1; }; return left; }; // 1. 정렬해줄 것. // 2. 이분탐색해줄 것. // 3. 결과적으로 최대의 값을 구해줄 것. const solution = (d, budget) => { const sortedD = getSortArray(d, (a, b) => a - b); return binarySearch(sortedD, budget); }; (() => { const d = [1, 3, 2, 5, 4]; const budget = 10; console.log(solution(d,budget)) })();
효성
function solution(d, budget) { d.sort((a,b) => a-b); let result = 0; for(let i=0; i<d.length; i++) { budget -= d[i]; if(budget < 0) { return result; } result++; } return result; }
은찬
const binarySearch = (d, mid, budget) => { let sum = 0; for(let i = 0; i <= mid; i++){ sum += d[i]; if(sum > budget){ return true; } } return false; } const solution = (d, budget) => { let front = 0; let back = d.length - 1; d.sort((a, b) => a - b); while(front <= back){ const mid = Math.floor((front + back) / 2); if(binarySearch(d, mid, budget)){ back = mid - 1; } else{ front = mid + 1; } } return front; }
가영
function solution(d, budget) { let answer = 0; let start = 0; let end = d.length - 1; d.sort((a, b) => a - b); while (start <= end) { const mid = Math.floor((start + end) / 2); const currSum = sum(d, mid); if (currSum <= budget) { if (mid === d.length - 1 || (currSum + d[mid + 1]) > budget) { answer = mid + 1; break; } start = mid + 1 } else { end = mid - 1; } } return answer; } const sum = (arr, targetIdx) => arr.filter((_, index) => index <= targetIdx) .reduce((acc, element) => acc += element);
희진
function solution(d, budget) { let count = 0; let sum = 0; d.sort((a,b)=>a-b); for(var i=0; i < d.length; i++) { count++; sum += d[i]; if(sum > budget) { count--; break; } } return count; }