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
반응형