문제
주어진 수 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);
});