반응형
[풀이]
function solution(d, budget) {
let result = 0;
let sum = 0;
d = d.sort((a, b) => a - b);
for (let i = 0; i < d.length; i++) {
sum += d[i];
if (sum <= budget) {
result++;
} else {
break;
}
}
return result;
}
이건,, 잘 못풀었다...
for문을 통해서 sum += d[i] 까지는 썼는데 최대 몇개의 부서에 지원해야 하는지? 에 대한 값을 풀 수가 없었다.
구글링해서 풀이를 봤는데, d 배열에 대한 오름차순을 먼저 시켰어야 했다.
이 때, 오름차순을 시키는 이유는 적은 금액부터 지원해주면 최대한 많은 부서의 물품을 구매할 수 있기 때문이다.
따라서,
1. 최대 몇개의 부서에 지원할지에 대한 결과값을 담을 result 변수를 설정
2. 각 부서에서 신청한 금액의 합을 담을 sum 변수 설정
3. d 배열을 sort()를 사용해 오름차순 시켜줌 (적은 금액을 지원한 부서 순서대로)
4. for문을 돌려서 d 배열 안의 값을 누적시키면서 더해줌
5. if문 안에서 신청한 금액의 합(sum)이 예산(budget)보다 적거나 같으면 result 값을 1 증가시켜줌 (최대 지원가능한 부서의 수)
6. 만약 sum 값이 budget 값을 넘으면 break 를 걸어 for문 순회 종료
[코드 리뷰]
function solution(d, budget) {
let result = 0;
let sum = 0;
d.sort((a, b) => a - b);
for (let i = 0; i < d.length; i++) {
sum += d[i];
if (sum > budget) return result;
result++;
}
return result;
}
if - else를 사용해 break 로 종료하는 것 보다
sum에 d의 값을 누적하다가 sum > budget 일 때 바로 return result 하는 것이 좋은 방법이 될 것 같다.
sort 메서드는 기존 배열을 바꿔주는 메서드이므로 다시 d에 할당하지 않아도 된다.
const arr = [5, 2, 3, 1, 4];
arr.sort((a,b) => a - b);
console.log(arr); // [1, 2, 3, 4, 5]
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 핸드폰 번호 가리기 (1) | 2022.09.22 |
---|---|
[JS] 콜라츠 추측 (0) | 2022.09.21 |
[JS] 나누어 떨어지는 숫자 배열 (1) | 2022.09.21 |
[JS] 두 정수 사이의 합 (0) | 2022.09.21 |
[JS] 부족한 금액 계산하기 (1) | 2022.09.21 |