JS코딩테스트
[JS코테] Summer/Winter Coding(~2018) - 예산
DaeunCoding
2023. 5. 7. 20:31
728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12982
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.
물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
[나의 풀이]
function solution(d, budget) {
let arr = d.sort((a,b) => a-b);
let answer = 0;
for(i=0;i<d.length;i++){
answer += arr[i];
if(answer > budget) {
return i;
} else if(answer == budget) {
return i+1;
}
if(i == d.length-1){
return i+1;
}
}
}
[풀이 방법]
function solution(d, budget) {
// 배열 d를 오름차순으로 나열한 배열 arr 선언
let arr = d.sort((a,b) => a-b);
// 차례로 더한 값을 넣어줄 변수 answer 선언
let answer = 0;
// for문으로 배열 arr를 index 0부터 반복
for(i=0;i<d.length;i++){
// answer에 배열 앞부터 더한 값 넣어줌
answer += arr[i];
// answer값이 budget보다 커지면 for문 멈추고 i반환, 같으면 i+1 반환
if(answer > budget) {
return i;
} else if(answer == budget) {
return i+1;
}
// 다 더해도 answer이 budget보다 작을 때 i+1 반환
if(i == d.length-1){
return i+1;
}
}
}
[다른 풀이]
function solution(d, budget) {
return d.sort((a, b) => a - b).reduce((count, price) => {
return count + ((budget -= price) >= 0);
}, 0);
}
나도 for문을 안 쓰고 reduce를 쓰고 싶었는데, 풀다가 실패해서 다시 for문으로 돌아왔었다.
다른 분이 reduce로 깔끔하게 풀어내셨다.
[풀이 방법]
function solution(d, budget) {
return
// d를 오름차순으로 재배열
d.sort((a, b) => a - b)
// reduce로 계산식 진행 (count에 계속 더해짐)
.reduce((count, price) => {
// budget이 price보다 크거나 같을 때만 count에 1을 더해줌
return count + ((budget -= price) >= 0);
// count 초기값은 0
}, 0);
}
reduce도 익숙해지면 활용도가 높을 것 같다.
728x90
반응형