[Javascript] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค : ์˜ˆ์‚ฐ
728x90

1. ๋ฌธ์ œ

S์‚ฌ์—์„œ๋Š” ๊ฐ ๋ถ€์„œ์— ํ•„์š”ํ•œ ๋ฌผํ’ˆ์„ ์ง€์›ํ•ด ์ฃผ๊ธฐ ์œ„ํ•ด ๋ถ€์„œ๋ณ„๋กœ ๋ฌผํ’ˆ์„ ๊ตฌ๋งคํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธˆ์•ก์„ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ „์ฒด ์˜ˆ์‚ฐ์ด ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ถ€์„œ์˜ ๋ฌผํ’ˆ์„ ๊ตฌ๋งคํ•ด ์ค„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ถ€์„œ์˜ ๋ฌผํ’ˆ์„ ๊ตฌ๋งคํ•ด ์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผํ’ˆ์„ ๊ตฌ๋งคํ•ด ์ค„ ๋•Œ๋Š” ๊ฐ ๋ถ€์„œ๊ฐ€ ์‹ ์ฒญํ•œ ๊ธˆ์•ก๋งŒํผ์„ ๋ชจ๋‘ ์ง€์›ํ•ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1,000์›์„ ์‹ ์ฒญํ•œ ๋ถ€์„œ์—๋Š” ์ •ํ™•ํžˆ 1,000์›์„ ์ง€์›ํ•ด์•ผ ํ•˜๋ฉฐ, 1,000์›๋ณด๋‹ค ์ ์€ ๊ธˆ์•ก์„ ์ง€์›ํ•ด ์ค„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

๋ถ€์„œ๋ณ„๋กœ ์‹ ์ฒญํ•œ ๊ธˆ์•ก์ด ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด d์™€ ์˜ˆ์‚ฐ budget์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ๋Œ€ ๋ช‡ ๊ฐœ์˜ ๋ถ€์„œ์— ๋ฌผํ’ˆ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

1.1. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

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

 

 

 

2. ํ’€์ด

๋ฌธ์ œ๊ฐ€ ๊ฝค ๊ธด ํŽธ์ด์ง€๋งŒ ๊ฒฐ๊ตญ ์ตœ๋Œ€ ๋ช‡ ๊ฐœ์˜ ๋ถ€์„œ์— ๋ฌผํ’ˆ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ฌป๊ณ  ์žˆ๋‹ค.

์‹ ์ฒญํ•œ ๊ธˆ์•ก์ด ์ ์€ ๋ถ€์„œ๋ฅผ ์šฐ์„ ์œผ๋กœ ํ•ด์•ผ ๋” ๋งŽ์€ ๋ถ€์„œ์— ์ง€์›ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ผ๋‹จ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  budget์—์„œ d์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋นผ์ฃผ๋ฉด์„œ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€๊ณ  budget์ด 0์ด ๋˜๋ฉด ์นด์šดํŠธ๋ฅผ ๋ฆฌํ„ด!

 

 

reduce๋กœ ํ’€๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์ƒ๊ฐ์ฒ˜๋Ÿผ ์ž˜ ์•ˆ๋˜์–ด์„œ ์ฒ˜์Œ์—๋Š” for๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

 

2.1. 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๋กœ ๋‹ค์‹œ ํ’€์—ˆ๋‹ค.

 

 

 

2.2. 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