cubeOdd.js (7kyu 67)

Codewars 알고리즘 풀이


Problem

  • Find the sum of the odd numbers within an array, after cubing the initial integers.
    • 초기 정수를 세제곱한 후, 배열 내 홀수의 합을 반환한다.
  • This function will return ‘undefined’ if any of the values aren’t numbers.
    • 이 함수는 값이 숫자가 아닌 경우, ‘undefined’를 반환한다.


Solution 01

function cubeOdd(arr) {
  let result = 0;
  
  for (let i = 0; i < arr.length; i++) {
    if (isNaN(arr[i])) return undefined;
    
    if (arr[i] % 2 !== 0) {
      const cubed = arr[i] * arr[i] * arr[i];
      result += cubed;
    }
  }
  return result;
}

cubeOdd([1, 2, 3]);         // 28
cubeOdd([1, 2, 3, 4]);      // 28
cubeOdd([-3, -2, 2, 3]);    // 0
cubeOdd(['a', 1, 2, 'd']);  // undefined

isNaN(): 값이 숫자인지를 확인한다. (Not a Number)


Solution 02

function cubeOdd(arr) {
  let result = 0;
  
  for (let i = 0; i < arr.length; i++) {
    if (isNaN(arr[i])) return undefined;
    
    if (arr[i] % 2 !== 0) {
      result += Math.pow(arr[i], 3);
    }
  }
  return result;
}

cubeOdd([1, 2, 3]);         // 28
cubeOdd([1, 2, 3, 4]);      // 28
cubeOdd([-3, -2, 2, 3]);    // 0
cubeOdd(['a', 1, 2, 'd']);  // undefined

Math.pow(x, y): x의 값을 y의 거듭제곱(x^y)으로 반환한다.


Solution 03

function cubeOdd(arr) {
  let result = arr.filter(i => i % 2 !== 0).map(i => i * i * i).reduce((sum, i) => sum + i, 0);
  
  return isNaN(result) ? undefined : result;
}

cubeOdd([1, 2, 3]);         // 28
cubeOdd([1, 2, 3, 4]);      // 28
cubeOdd([-3, -2, 2, 3]);    // 0
cubeOdd(['a', 1, 2, 'd']);  // undefined

filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.

map(): 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.

reduce(): 배열을 하나의 값으로 줄이고, 그 값을 반환한다.