알고리즘 - freeCodeCamp - Sum All Primes ver.1

NO PAIN, NO GAIN·2019년 12월 1일
0

algorithm

목록 보기
9/18

문제

주어진 숫자 범위 안에서 소수를 전부 더하시오.

예시

10이 주어지면 2, 3, 5, 7 이 소수이며 합이 17이다.

풀이

function sumPrimes(num) {
  let numbers = []; // 가.

  for (let i = 2; i <= num; i++){ // 나.
    numbers.push(i);
  }

  for (let i = 2; i <= num; i++){ // 다.
    for (let j = 0; j < numbers.length; j++){ // 라.
      if (Number.isInteger(numbers[j] / i) && (numbers[j] / i) > 1) { // 마.
        numbers.splice(j, 1);
      }
    }
  }
  const sumOfPrimes = (acc, curr) => acc + curr; // 바.
  
  return numbers.reduce(sumOfPrimes);
}

가. numbers변수는 2부터 주어진 숫자까지 담는 배열이다.
나. 2부터 주어진 숫자까지 반복한다.
다. 2부터 주어진 숫자까지 반복하고
라. 0부터 numbers 길이보다 작을 때까지 반복한다.
마. numbersj번째의 숫자를 i로 나눴을 때 정수이면서, 1보다 크면 i의 배수의 이므로 소수에서 제외된다.
바. 변수 sumOfPrimes는 reduce 메소드의 callback 함수로 사용되는 함수를 정의했다.

풀이하면서 반복문을 중첩해서 사용한 점이 마음에 안 든다. 반복문을 중첩해서 사용하지 않고 풀이하는 방법이 있을 거 같다. 좀 더 생각해 보고 다른 풀이 방법을 생각해 봐야겠다.
위의 풀이 방법은 에라토스테네스의 체를 구현 방법이다. 연속되는 숫자들 중에 2는 자기자신과 1로 나누어 지고 나머지 숫자들은 2로 나누어지는 것들은 제외한다는 소수판별법이다.

profile
갈고 닦자.

0개의 댓글