내가 푼 풀이
function solution(d, budget) {
let answer = 0;
d.sort((a,b) => a-b)
for(i=0; i < d.length; i++) {
if(budget >= d[i])
answer++
budget = budget - d[i]
}
return answer;
}
이 문제에서는 .sort()를 먼저 사용하고 시작해야 한다.
왜냐하면 정해진 예산에 최대로 예산을 줄 수 있는 부서 갯수를 구해야하기 때문이다.
- 숫자배열을 가지고 할 때 오름차순, 내림차순 생각하기!
숫자타입이라도 일시적으로 문자열로 변환 후 유니코드 코드 포인트 순서를 기준으로 하기 때문에 뒤죽박죽이 되기 때문이다.
예를들면 (출처: 모던 자바스크립트 책)
'2'의 유니코드는 U+0032 , '10'의 유니코드는 U+0031U+0030이다.
그렇담 [2,10] 배열에 sort()메서드를 적으면 [10,2]로 나오게 된다.
정렬 순서를 정의하는 비교 함수를 인수로 전달해야 한다!!
arr.sort((a,b) => a-b) : 오름차순
arr.sort((a,b) => b-a) : 내림차순
a-b의 결과가
0보다 작으면 비교 함수의 첫 번째 인수(a)를 우선 정렬,
0이면 정렬하지 않고,
0보다 크면 두 번째 인수(b)를 우선 정렬한다.