06_arrProduct

TKΒ·2022λ…„ 6μ›” 27일

[μ½”ν”Œλ¦Ώ] μž¬κ·€

λͺ©λ‘ 보기
6/9

πŸ’¬ 문제

배열을 μž…λ ₯λ°›μ•„ λͺ¨λ“  μš”μ†Œμ˜ 곱을 리턴해야 ν•©λ‹ˆλ‹€.

πŸ“ μž…λ ₯

  • 인자 1 : arr
    number νƒ€μž…μ„ μš”μ†Œλ‘œ κ°–λŠ” λ°°μ—΄

πŸ“‚ 좜λ ₯

  • number νƒ€μž…μ„ 리턴해야 ν•©λ‹ˆλ‹€.
  • arr[0] βˆ—* arr[1] βˆ—* ... βˆ—* arr[n-1]
  • arr.lengthλŠ” n

β›” 주의 사항

  • ν•¨μˆ˜ arrProductλŠ” μž¬κ·€ν•¨μˆ˜μ˜ ν˜•νƒœλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
  • 반볡문(for, while) μ‚¬μš©μ€ κΈˆμ§€λ©λ‹ˆλ‹€.
  • μž…λ ₯받은 배열은 ν•¨μˆ˜μ˜ 호좜 뒀에도 처음 μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€(immutability).
  • μž…λ ₯으둜 λ“€μ–΄μ˜€λŠ” arr의 λͺ¨λ“  μš”μ†ŒλŠ” μ •μˆ˜ 값을 κ°–λŠ”λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.
  • 빈 λ°°μ—΄μ˜ 곱은 1 μž…λ‹ˆλ‹€.

πŸ“Ί μž…μΆœλ ₯ μ˜ˆμ‹œ

let output = arrProduct([1, -2, 1, 3]);
console.log(output); // --> -6

❓ λ‚΄κ°€ ν‘Ό λ‹΅

function arrProduct(arr) {
// TODO: 여기에 μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
if(arr.length === 0){
  return 1;
}else{
  return arr.shift()*arrProduct(arr);
}
}
// shift() λ©”μ„œλ“œλŠ” λ°°μ—΄μ—μ„œ 첫 번째 μš”μ†Œλ₯Ό "제거"ν•˜κ³ , "제거된 μš”μ†Œλ₯Ό λ°˜ν™˜"ν•©λ‹ˆλ‹€. 
// 이 λ©”μ„œλ“œλŠ” λ°°μ—΄μ˜ 길이λ₯Ό λ³€ν•˜κ²Œ ν•©λ‹ˆλ‹€.(mutable)

βœ… μ •λ‹΅ 및 λ‚˜λ§Œμ˜ 해석

function arrProduct(arr) {
  if (arr.length === 0) {
    return 1;
  }

  // const [head, ...tail] = arr;
  const head = arr[0];
  const tail = arr.slice(1);
  return head * arrProduct(tail);
}
  
  // λ°”λ‘œ 직전 κ²Œμ‹œλ¬ΌμΈ 05_arrSumκ³Ό 풀이가 κ°™λ‹€.
                                                        

πŸ“ ν•œμ€„ν‰

λ‚˜λŠ” shiftλ©”μ†Œλ“œλ‘œ 레퍼런슀 ν’€μ΄μ˜ arr[0]와 같이 ν‘œν˜„ν•΄ μ£Όμ—ˆλ‹€.

profile
μ‰¬μš΄κ²Œ 쒋은 FE개발자😺

0개의 λŒ“κΈ€