ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋“ฑ์ฐจ์ˆ˜์—ด์˜ ํŠน์ •ํ•œ ํ•ญ๋งŒ ๋”ํ•˜๊ธฐ - js (reduce ํ•จ์ˆ˜ ์ดˆ๊ธฐ๊ฐ’?)

2023. 7. 26. 19:06ใ†Study_Develop/์•Œ๊ณ ๋ฆฌ์ฆ˜ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

๋ฐ˜์‘ํ˜•

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋“ฑ์ฐจ์ˆ˜์—ด์˜ ํŠน์ •ํ•œ ํ•ญ๋งŒ ๋”ํ•˜๊ธฐ - js

๋ฌธ์ œ

๋‘ ์ •์ˆ˜ a, d์™€ ๊ธธ์ด๊ฐ€ n์ธ boolean ๋ฐฐ์—ด included๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ฒซ์งธํ•ญ์ด a, ๊ณต์ฐจ๊ฐ€ d์ธ ๋“ฑ์ฐจ์ˆ˜์—ด์—์„œ included[i]๊ฐ€ i + 1ํ•ญ์„ ์˜๋ฏธํ•  ๋•Œ, ์ด ๋“ฑ์ฐจ์ˆ˜์—ด์˜ 1ํ•ญ๋ถ€ํ„ฐ nํ•ญ๊นŒ์ง€ included๊ฐ€ true์ธ ํ•ญ๋“ค๋งŒ ๋”ํ•œ ๊ฐ’์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

1 โ‰ค a โ‰ค 100
1 โ‰ค d โ‰ค 100
1 โ‰ค included์˜ ๊ธธ์ด โ‰ค 100
included์—๋Š” true๊ฐ€ ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์ž… ์ถœ๋ ฅ ์˜ˆ
a b included result
3 4 [true, false, false, true, true] 37
7 1 [false, false, false, true, false, false, false] 10

 

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ 1๋ฒˆ์€ a์™€ d๊ฐ€ ๊ฐ๊ฐ 3, 4์ด๊ณ  included์˜ ๊ธธ์ด๊ฐ€ 5์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1ํ•ญ 2ํ•ญ 3ํ•ญ 4ํ•ญ 5ํ•ญ
๋“ฑ์ฐจ์ˆ˜์—ด 3 7 11 15 19
included true false false true true

 

๋”ฐ๋ผ์„œ true์— ํ•ด๋‹นํ•˜๋Š” 1ํ•ญ, 4ํ•ญ, 5ํ•ญ์„ ๋”ํ•œ 3 + 15 + 19 = 37์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

 

solution.js
function solution(a, d, included) {
    const arr = [a]
    for(let i = 1 ; i < included.length; i ++) {
        arr[i] = arr[i-1] + d
    }
    
    return arr.reduce((acc, cur, idx) => included[idx] ? acc+cur : acc , 0)
}

 

- return arr.reduce((acc, cur, idx) => included[idx] ? acc + cur : acc, 0): ๋ฐฐ์—ด arr์„ ์ˆœํšŒํ•˜๋ฉฐ included ๋ฐฐ์—ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ํ•ญ์„ ์„ ํƒํ•˜์—ฌ ํ•ฉ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

- arr.reduce((acc, cur, idx) => ... , 0): reduce ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด arr์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์ˆœํšŒํ•˜๋ฉฐ, ์ดˆ๊ธฐ๊ฐ’ 0์„ ๊ฐ€์ง€๋Š” acc ๋ณ€์ˆ˜์— ํ•ฉ์„ ๋ˆ„์ ํ•œ๋‹ค.

- included[idx] ? acc + cur : acc: ํ˜„์žฌ ํ•ญ(cur)์˜ ์ธ๋ฑ์Šค(idx)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ included ๋ฐฐ์—ด์˜ ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ true๋ผ๋ฉด ํ•ฉ(acc + cur)์— ํ•ญ์„ ์ถ”๊ฐ€ํ•˜๊ณ , false๋ผ๋ฉด ๋ˆ„์ ํ•ฉ(acc)์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋‹ค.

 

reduce () ์ดˆ๊ธฐ๊ฐ’?

 

return arr.reduce((acc, cur, idx) => included[idx] ? acc + cur : acc, 0)

 

- reduce ๋ฉ”์„œ๋“œ ๋์— ์žˆ๋Š” , 0์€ accumulator์˜ ์ดˆ๊ธฐ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ฐ์†Œ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— 'acc'์˜ ์ดˆ๊ธฐ ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ '0'์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ 'acc'์˜ ์ดˆ๊ธฐ๊ฐ’์ด '0'์ธ ์ƒํƒœ์—์„œ ์ถ•์†Œ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

 

์ดˆ๊ธฐ ๊ฐ’ '0'์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ 'arr' ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ํฌํ•จ๋œ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ(๋ชจ๋“  'included' ๊ฐ’์ด 'false'์ž„) 'reduce' ๋ฉ”์„œ๋“œ๊ฐ€ ์—ฌ์ „ํžˆ '0'์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค. 

์š”์•ฝํ•˜๋ฉด reduce ๋ฉ”์†Œ๋“œ๋Š” ๋ˆ„์‚ฐ๊ธฐ์˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ , 0์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ sum์— ์›์†Œ๊ฐ€ ํ•˜๋‚˜๋„ ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์œ ํšจํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.