[1978] 소수 찾기 Find decimals

notion image

문제

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

입력

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

출력

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

예제 입력 1

4
1 3 5 7

예제 출력 1

3
 

My solution


소수 구하기 문제에 이어 똑같은 문제인데 소수를 에라토스테네스의 체를 이용해서 2부터 그 수를 제곱근한 수까지만 약수가 존재하는지 확인한 다음 하나라도 존재하면 그 수는 소수가 아닌 것을 확신할 수 있으므로 isPrime() 함수를 이용해 아래와 같이 구현할 수 있다.
1이하일 경우는 당연히 소수가 아니고 2인 경우에도 2로 나누었을 때 0이 되지만 소수이므로 에지 케이스 처리를 해주었다.
며칠만에 백준을 풀었더니 입력 폼을 또 실수했는데 역시 꾸준히 매일 풀어줘야겠다.

소스코드

function isPrime(num) {
    if (num <= 1) return false;
    if (num === 2) return true;

    for (let i = 3; i <= Math.floor(Math.sqrt(num)); i++)
        if (num % i === 0) return false;

    return true;
}

function solution(i) {
    let answer = 0;
    let nums = i
        .split("\n")[1]
        .split(" ")
        .map((v) => parseInt(v));

    for (let x of nums) if (isPrime(x)) answer++;

    console.log(answer); // 백준

    return answer;
}

test("solution", () => {
    expect(solution("4\n1 3 5 7")).toBe(3);
});