문자열 다루기 기본 (every, isNaN)

» JavaScript

문자열 다루기 기본 (every, isNaN)

문제

https://programmers.co.kr/learn/courses/30/lessons/12921

풀이

function solution(n) {
  let arr = []; // 빈 배열
  let num = 0; // 소수의 개수
  for (let i = 0; i < n + 1; i++) {
    // 0부터 n까지 true로 채움
    arr.push(true);
  }

  for (let i = 2; i * i <= n; i++) {
    // 1은 소수가 아니므로 2부터 제곱까지 반복
    if (arr[i]) {
      // true라면 제곱부터 n까지 반복해서 false로 만듬
      for (let j = i * i; j <= n; j += i) {
        arr[j] = false;
      }
    }
  }
  arr.splice(0, 2, false, false);
  // 0과 1은 소수가 아니므로 false로 만들어줌
  for (let i = 0; i < arr.length; i++) {
    // arr 중에 true가 있을때마다 1씩 추가
    if (arr[i]) num++;
  }

  return num;
}

에라토스테네스의 체를 사용하여 풀 수 있는 문제 에라토스테네스의 체란 소수가 아닌 수를지워나가는 것을 뜻한다 먼저 1을 지운후 2를 제외한 2의 배수를 모두 지운다 그리고 3의 배수 5의 배수 … 7의 배수 식으로 지워나가면 소수를 찾을 수 있게된다