코딩테스트/JavaScript

[코딩테스트] 졸업 선물

CODE_PLAN 2023. 12. 27. 21:44

나의 풀이 

function solution(m, product) {
            let answer = 0;
            let n = arr[0].length;
            let min = Number.MIN_SAFE_INTEGER;

            let reverse = arr.sort();
            console.log('reverse=' + reverse)


            for (let i = 0; i < arr.length; i++) {
                for (let j = 0; j < n; j++) {

                }
            }

 
        }

        let arr = [[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
        // [0,0],[0,1], [1,0], [1,1],[2,0],[2,1],

        console.log(solution(28, arr));
        console.log('arr=?' + arr[0].length)

    </script>

 

우선 나는 이런식을 풀려고했고 문제 구상및 이해는 다 되었었다.

근데 이걸 코드로 구현하는게 아직 미흡해서 제한시간이 지난후 답을 보게되었다.

모범 정답

<script>
    function solution(m, product){
        let answer=0;
        let n=product.length;
        product.sort((a, b)=>(a[0]+a[1])-(b[0]+b[1]));
        for(let i=0; i<n; i++){
            let money=m-(product[i][0]/2+product[i][1]);
            let cnt=1;
            for(let j=0; j<n; j++){
                if(j!==i && (product[j][0]+product[j][1])>money) break;
                if(j!==i && (product[j][0]+product[j][1])<=money){
                    money-=(product[j][0]+product[j][1]);
                    cnt++;
                }
            }
            answer=Math.max(answer, cnt);
        }  
        return answer;
    }
   
    let arr=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
    console.log(solution(28, arr));
</script>

 

풀이 핵심 1)        if(j!==i && (product[j][0]+product[j][1])>moneybreak;   

위 코드는 money보다 금액이 클경우를 막아주기 위한 코드로서 적어야 쓸데없는 동작을 안한다.

2) sort에서 나는 a,b만 적어주고 식이 없었는데 (a[0]+a[1])-(b[0]+b[1]) 이런식으로 구체적으로 적어줘야 값이 잘 정렬된다.