기본 수학 2. 1단계
1978번. 소수 찾기
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let data = input[1].split(" ").map((x) => Number(x));
// 소수 판별을 위한 함수
// filter() 메서드를 사용하므로 true, false로 반환
// true만 남기고 나머지는 제거하여 새로운 배열을 만들어준다.
const checkAns = (num) => {
// 1은 소수가 아니므로 false 반환
if(num === 1){
return false;
}
// num을 2부터 num까지의 숫자로 나눠본다.(기본 원리)
// 아래는 num의 sqrt(num)까지만 확인하는 방법이다.(해설 링크 참고)
for (let i = 2; i*i <= num; i++){
// 나눠지는 값이 하나라도 있다면 소수가 아니므로 false 반환
if(num % i === 0){
return false;
}
}
// 위 조건들에 해당이 없다면 소수가 아니므로 true 반환
return true;
}
// 소수만 남긴 배열 생성
const answer = data.filter((num) => checkAns(num));
// 배열의 길이 = input에 들어있는 소수의 개수
console.log(answer.length);
입력 첫 째 줄에 주어지는 반복 횟수에 얽매이지 않아도 된다.
소수 판별에 쓰이는 다양한 방법이 있는데 이 곳의 풀이 3을 참고하자.
자바로 푸셨지만 이런 방법도 있다는 것을 알게됐다.
for보다는 메서드를 사용하는 것이 훨씬 빠르기 때문에 메서드를 사용하는 풀이들을 보고 하루 빨리 익숙해지는 것이 좋을 것이라 생각된다.