[Javascript] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ : μ˜ˆμ‚°
728x90

문제

Sμ‚¬μ—μ„œλŠ” 각 λΆ€μ„œμ— ν•„μš”ν•œ λ¬Όν’ˆμ„ 지원해 μ£ΌκΈ° μœ„ν•΄ λΆ€μ„œλ³„λ‘œ λ¬Όν’ˆμ„ κ΅¬λ§€ν•˜λŠ”λ° ν•„μš”ν•œ κΈˆμ•‘μ„ μ‘°μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, 전체 μ˜ˆμ‚°μ΄ μ •ν•΄μ Έ 있기 λ•Œλ¬Έμ— λͺ¨λ“  λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 수 μžˆλ„λ‘ ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

λ¬Όν’ˆμ„ ꡬ맀해 쀄 λ•ŒλŠ” 각 λΆ€μ„œκ°€ μ‹ μ²­ν•œ κΈˆμ•‘λ§ŒνΌμ„ λͺ¨λ‘ 지원해 μ€˜μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 1,000원을 μ‹ μ²­ν•œ λΆ€μ„œμ—λŠ” μ •ν™•νžˆ 1,000원을 지원해야 ν•˜λ©°, 1,000원보닀 적은 κΈˆμ•‘μ„ 지원해 쀄 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

 

λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ d와 μ˜ˆμ‚° budget이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ΅œλŒ€ λͺ‡ 개의 λΆ€μ„œμ— λ¬Όν’ˆμ„ 지원할 수 μžˆλŠ”μ§€ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

d budget result
[1,3,2,5,4] 9 3
[2,2,3,3] 10 4

 

 

 

풀이

λ¬Έμ œκ°€ κ½€ κΈ΄ νŽΈμ΄μ§€λ§Œ κ²°κ΅­ μ΅œλŒ€ λͺ‡ 개의 λΆ€μ„œμ— λ¬Όν’ˆμ„ 지원할 수 μžˆλŠ”μ§€λ₯Ό 묻고 μžˆλ‹€.

μ‹ μ²­ν•œ κΈˆμ•‘μ΄ 적은 λΆ€μ„œλ₯Ό μš°μ„ μœΌλ‘œ ν•΄μ•Ό 더 λ§Žμ€ λΆ€μ„œμ— 지원할 수 μžˆμœΌλ‹ˆ 일단 주어진 배열에 λŒ€ν•΄ λ‚΄λ¦Όμ°¨μˆœ 정렬이 ν•„μš”ν•˜λ‹€.

그리고 budgetμ—μ„œ d의 μš”μ†Œλ₯Ό ν•˜λ‚˜μ”© λΉΌμ£Όλ©΄μ„œ 카운트λ₯Ό ν•˜λ‚˜μ”© λŠ˜λ €κ°€κ³  budget이 0이 되면 카운트λ₯Ό 리턴!

 

 

reduce둜 ν’€κ³  μ‹Άμ—ˆμ§€λ§Œ μƒκ°μ²˜λŸΌ 잘 μ•ˆλ˜μ–΄μ„œ μ²˜μŒμ—λŠ” for문을 μ΄μš©ν•΄μ„œ ν’€μ—ˆλ‹€.

 

for문으둜 ν’€κΈ°

function solution(d, budget){
      d.sort((a,b) => a-b);

     for (let i = 0; i < d.length; i++) {
        budget -= d[i];
        answer += 1;

        if (budget < 0){
           answer--;
           break;  
        } 

    }

    return answer;
}

이후 λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ 풀이λ₯Ό 보고 reduce둜 λ‹€μ‹œ ν’€μ—ˆλ‹€.

 

 

 

reduce λ©”μ„œλ“œλ‘œ ν’€κΈ°

function solution(d, budget) {
    var answer = d.sort((a,b) => a - b).reduce((acc, curr) => acc + ((budget -= curr) >= 0), 0);
    return answer;
}

reduce λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ acc에 μ§€μ›ν•˜κΈ°λ‘œ ν•œ λΆ€μ„œλ₯Ό μΉ΄μš΄νŠΈν•œλ‹€.
0보닀 μž‘μ§€ μ•Šμ„ λ•ŒκΉŒμ§€ budgetμ—μ„œ ν˜„μž¬ 값을 λΊ€λ‹€λŠ” 쑰건.

이번 κΈ°νšŒμ— reduce ν•¨μˆ˜λ₯Ό λͺ‡ 번 λ°˜λ³΅ν•˜λ‹€ λ³΄λ‹ˆ μ’€ 더 μ΅μˆ™ν•΄μ§„ 것 κ°™λ‹€.

 

 


reduce ν•¨μˆ˜μ— λŒ€ν•΄μ„œλŠ” μ•„λž˜λ₯Ό μ°Έκ³ !

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() λ©”μ„œλ“œλŠ” λ°°μ—΄μ˜ 각 μš”μ†Œμ— λŒ€ν•΄ 주어진 λ¦¬λ“€μ„œ (reducer) ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³ , ν•˜λ‚˜μ˜ 결과값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

developer.mozilla.org

 

 

 

728x90