문제
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) 으로 작성했는데, 지금 보니 제곱근까지 포함해야 정확하다.