baekjoon 1929 소수 구하기(nodejs)

Maliethy·2021년 12월 26일
0

algorithm

목록 보기
4/5

1. 틀린 코드 - 시간초과

//소수 구하기

const question = `3 16`;
// 3
// 5
// 7
// 11
// 13

const fs = require("fs");
const input =
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin", "utf8").trim()
    : question;

let result = [2, 3];

const [startIdx, lastIdx] = input.split(" ").map(Number);

for (let num = startIdx; num <= lastIdx; num++) {
  if (
    result.every((pn) => {
      // console.log(num, pn);
      return num % pn !== 0;
    })
  ) {
    // console.log("num", num);
    result.push(num);
    continue;
  }
}

console.log(result.filter((int) => int >= startIdx).join("\n"));

2. 맞은 코드

//소수 구하기

const question = `3 100`;
// 3
// 5
// 7
// 11
// 13

const fs = require("fs");
const input = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin", "utf8").trim()
    : question
).split("\n");

const [startNum, lastNum] = input[0].split(" ").map(Number);
let isPrimeNumber = Array(lastNum + 1).fill(true);
isPrimeNumber[0] = isPrimeNumber[1] = false;
const results = [];

for (let i = 2; i <= Math.ceil(Math.sqrt(lastNum)); i++) {
  let mutipleIdx = 2;
  while (i * mutipleIdx <= lastNum) {
    isPrimeNumber[i * mutipleIdx] = false;
    mutipleIdx++;
  }
}

isPrimeNumber.filter(
  (list, idx) => idx > startNum - 1 && list && results.push(idx)
);

console.log(results.join("\n"));

참고:
맞은 코드 참고 사이트
https://velog.io/@gkswn45/JavaScript-%EB%B0%B1%EC%A4%80-1929%EB%B2%88-%EC%86%8C%EC%88%98%EA%B5%AC%ED%95%98%EA%B8%B0

에라토스테네스의 체 이미지 (위키백과)

profile
바꿀 수 있는 것에 주목하자

0개의 댓글