코딩테스트/백준

1978. 소수 찾기 - Node.js

MiteDev 2024. 9. 20. 15:18

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

문제

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

입력

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

출력

주어진 수들 중 소수의 개수를 출력한다.

코드

const fs = require('fs');
const file_path = process.platform === 'linux' ? 'dev/stdin' : `${__dirname}/input.txt`
const input = fs.readFileSync(file_path).toString().trim();

/**
 * @param {string} input 
 * @returns 
 */
const solution = (input) => {
    const [num, str] = input.replace(/\r/g, '').split('\n');
    const arr = str.split(' ').map(Number).filter(el => el !== 1);

    const result = arr.reduce((acc, cur) => {
        let temp = [];
        for (let i = 2; i < cur; i++) {
            if(!(cur % i)) {
                temp.push(false);
            }
        }

        !temp.length && acc.push(cur); 

        return acc;
    }, []);

    return result.length;
}

console.log(solution(input));

해설

1을 제외한 수 중 1과 본인만을 약수로 갖는 수를 약수라고 한다. 1은 모든 수의 공약수이므로 제외하고 2부터 주어진 수-1까지 수 중 나머지가 0이 아닌 경우만 체크해주면 된다.