Algorithm

[백준 / NodeJS] 1978번 소수 찾기

cob 2023. 4. 27. 15:41

 

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

 

 


1. 문제 설명

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

 

 

 


2. 입출력

입출력

 

 


3. 문제 풀이

약수대칭을 이루기 때문에 제곱근 값 까지만 약수의 여부를 검증하면 된다.
8의 약수는 1, 2, 4, 8 이지만 1*8 = 8*1, 2*4 = 4*2와 같다. 실제 소수 판별하기 위한 값은 1, 2 만 검증하면 된다.
const [n, arr] = require("fs")
  .readFileSync("./input.txt")
  .toString()
  .split(/\r\n/);

//const [n, arr] = require("fs").readFileSync("/dev/stdin").toString().split(/\n/);
function solution(arr) {

  // 1) 소수 판별 함수
  const isPrimeNumber = (n) => {
    // 2) 1은 소수 아님
    if (n == 1) return false;
    
    // 3) n의 제곱근 값을 구한다.
    let end = Math.sqrt(n);

    // 4) 제곱근 값까지만 소수 여부를 판별한다. 
    for (let i = 2; i <= end; i++) {
      if (n % i == 0) return false;
    }
    return true;
  };

  // 5) filter로 소수인 값만 체크해서 길이를 구한다.
  console.log(arr.split(" ").filter((item) => isPrimeNumber(item)).length);
}
solution(arr);

 

 

 

반응형