문제설명
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때,
최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
제한사항
- d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
- d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
- budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.
풀이방법
1. 배열을 오름차순으로 정렬
2. 총 예산에서 배열의 index순서대로 값을 빼준다.
3. 값을 빼면 count 값을 1 증가시킨다.
4. 예산이 뺄 값보다 작아질때 break
function solution(d, budget) {
d.sort((a,b)=>a-b);
let count=0;
for(let i = 0; i < d.length; i++){
if(d[i] > budget){
break;
}
budget-=d[i];
count++;
}
return count;
}
문제를 제출했을때 계속 정답율이 50% 였는데 그 이유가 sort()를 잘못 사용해서였다
var score = [4, 11, 2, 10, 3, 1];
/* 오류 */
score.sort(); // 1, 10, 11, 2, 3, 4
// ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지 않음
위의 예시처럼 sort메서드를 그냥 사용하게되면 아스키코드 순서대로 정렬되어 숫자의 오름차순으로 정렬되지않는다
이 부분을 몰랐기때문에 내 코드가 어디가 잘못된지 몰랐다.
숫자를 오름차순으로 정렬하려면
score.sort(function(a, b) { // 오름차순
return a - b;
// 1, 2, 3, 4, 10, 11
});
score.sort(function(a, b) { // 내림차순
return b - a;
// 11, 10, 4, 3, 2, 1
});
이런 식으로 값을 비교해주는 익명함수를 인자로 줘야한다.