문제
부서별로 물품을 구매하는데 필요한 예산과 예산 총액이 주어졌을때 최대한 많은 부서에 물품을 지원하려는 상황, 각 부서가 필요한 예산을 d 총예산이 budget이 주어지며 최대한 많은 부서에 물품을 지원할 수 있는 최대 개수를 반환
나의 풀이
function solution(d, budget) {
var answer = 0;
d.sort((a, b) => a - b);
console.log(d)
for(let i = 0; i < d.length; i++) {
budget -= d[i];
console.log(budget)
if (budget < 0) {
break;
}
answer++;
}
return answer;
}
- 각 부서 예산 d 배열을 오름차순으로 정렬하여 가장 예산을 적게 요구하는 부서부터 처리한다
- 반복문을 통해 배열의 d 요소를 처리한다 예산을 부서의 요청 예산 d[i]만큼 차감하고 예산이 음수가 되면 반복문 종료
- 반복문이 종료될 때까지 answer 1씩 증가시킨다
사실 감이 안와서 힌트 계속 봄..
다른 풀이
1) reduce
function solution(d, budget) {
d.sort((a, b) => a - b);
while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();
return d.length;
}
- d 오름차순
- while 루프를 사용하여 배열의 d 합이 주어진 예산 budget을 초과하는 경우 해당하는 부서를 pop을 사용해 배열에서 제거한다
function solution(d, budget) {
return d.sort((a, b) => a - b).reduce((count, price) => {
return count + ((budget -= price) >= 0);
}, 0);
}
- sort 사용하여 오름차순 정렬
- reduce를 사용하여 배열 d 반복 count 초기값 0으로 설정하고 각 요소 price를 처리한다
- count에서는 현재까지 지원한 부서의 수가 저장되고 price는 현재 부서 예산 요청을 나타낸다
- bugdet에서 price 차감하고 차감후의 예산이 0 이상인 경우 해당 부서에 지원할수 있는 것으로 판단해 +1
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 치킨 쿠폰 (0) | 2023.11.03 |
---|---|
javascript 2차원 배열 평균 순위 매기기 (1) | 2023.11.02 |
javaScript 좌표 배열 경로 이동 (1) | 2023.11.01 |
javaScript 2차원 직사각형의 넓이 계산하기 (0) | 2023.11.01 |
javascript 문자열 s가 1이 될때까지 이진변환 반복하기 (0) | 2023.10.31 |