Algorithm & 자료구조/알고리즘 w.JavaScript

[알고리즘]백준 1978번: 소수 찾기 W_node.js

프라이D 2022. 6. 16. 09:59

문제

const readFileSyncAddress = '/dev/stdin';

const fs = require('fs');
let [t, testcases] = fs
  .readFileSync(readFileSyncAddress)
  .toString()
  .trim()
  .replaceAll(/\r/g, '')
  .split(/\n/g);

const isPrime = function (n) {
  // n이 1이면 소수가 아니므로 false
  if (n === 1 || n < 0) return false;
  // 2부터 시작해 제곱근까지 나누어 떨어지는 수가 있으면 소수가 아니므로 false
  for (let i = 2; i <= Math.sqrt(n); i++) {
    if (n % i === 0) return false;
  }
  // 조건을 모두 통과하면 소수이므로 true
  return true;
};

const solution = function (arr) {
  arr = arr.split(' ').map((v) => +v);
  let cnt = 0;
  for (let x of arr) {
    if (isPrime(x)) cnt++;
  }
  return cnt;
};

console.log(solution(testcases));
  • 처음 문제를 제출했는데 바로 오답 판정을 받아서 '읭? 왜지 맞왜틀??' 했는데, 다시 보니 isPrime 함수에서 for문이 도는 범위를 n의 제곱근 이전으로 잡았다. 
  • 예전에 비슷한 문제의 답안을 i < Math.sqrt(n) 으로 작성했는데, 지금 보니 제곱근까지 포함해야 정확하다.