코딩테스트/Javascript
[프로그래머스] Lv1 예산
HangJu_95
2023. 10. 31. 23:04
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12982
문제 설명
내 풀이
function solution(d, budget) {
// 1. sort로 예산을 작은 수로 정렬한다.
d.sort((a,b) => a-b)
// 2. total 예산을 선언
let total = 0;
// 3. 반복문을 진행하면서 total 예산을 더해준다
for (let i = 0; i <d.length; i++) {
total += d[i]
// console.log(total)
// 3-1. 예산이 딱 맞는 경우
if (total == budget) {
return i + 1
}
// 3-1 total 값이 예산보다 큰 경우
if (total > budget) {
return i
}
}
// 4. 반복문을 다 하고도 예산이 남은 경우
return d.length
}
1. 예산을 작은 것부터 정렬한다.
작은 예산부터 넣어야 최대한 많은 부서를 넣을 수 있기 때문이다.
2. 반복문을 진행하면서 예산을 추가한다.
예산이 딱 맞는 경우에는 인덱스 i + 1을 하였고,
더했을 때 total 금액이 예산보다 큰 경우에는, 최종적으로 예산을 추가했던 부서를 빼야하기 때문에
i를 하였다.
예산이 남는 경우도 있으니 이러한 경우는 부서의 개수를 return하였다.
다른 사람의 풀이
function solution(d, budget) {
return d.sort((a, b) => a - b).reduce((count, price) => {
return count + ((budget -= price) >= 0);
}, 0);
}
reduce 메서드를 활용한 풀이법
((budget -= price) >= 0)
이 부분이 가장 간결해 보였으며 "+ ((budget -= price) >= 0)" 이 부분이 boolean 계산의 값에 따라 0 또는 1이 된다고 한다.
(true = 1, false = 0인 암묵적 변환을 이용)
이렇게 하여 부서 추가가 가능하면 1, 안된다면 0을 하여 얼만큼 카운트 되었는지 알 수 있다.
단지, 예산 한도보다 추가되었을 경우에도 계속 계산한다는 단점이 존재.
오늘 배운 점
- 암시적 형변환을 이용하는 방법