N

(프로그래머스 c++)예산 본문

프로그래머스 알고리즘/1단계

(프로그래머스 c++)예산

naeunchan 2021. 9. 28. 11:43
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/12982

 

코딩테스트 연습 - 예산

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는

programmers.co.kr

최대한 많은 부서에 예산을 줘야하기 때문에

주어진 d 배열을 오름차순으로 정렬한다.

 

이후 이진 탐색을 진행.

0 ~ mid 인덱스까지의 예산을 더하여 budget보다 작을 때까지의 front 값을 찾아 리턴하면 된다.

const binarySearch = (d, mid, budget) => {
    let sum = 0;
    
    for(let i = 0; i <= mid; i++){
        sum += d[i];
        
        if(sum > budget){
            return true;
        }
    }
    
    return false;
}

const solution = (d, budget) => {
    let front = 0;
    let back = d.length - 1;
    
    d.sort((a, b) => a - b);
    
    while(front <= back){
        const mid = Math.floor((front + back) / 2);
        
        if(binarySearch(d, mid, budget)){
            back = mid - 1;
        } else{
            front = mid + 1;
        }
    }
    
    return front;
}
728x90
반응형