let output = solution(10);
console.log(output); // 4
let output = solution(5);
console.log(output); // 3
입출력 예 #1: 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2: 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
function solution(n) {
const isPrime = (num) => {
if (num % 2 === 0) return false;
let sqrtNum = parseInt(Math.sqrt(num));
for (let i = 3; i <= sqrtNum; i += 2) {
if (num % i === 0) return false;
}
return true;
}
let count = 1;
for (let i = 3; i <= n; ++i) {
if (isPrime(i)) ++count;
}
return count;
}
function solution(n) {
// 분석
// 소수를 구하는 방법을 이해해야 한다.
// 소수는 자기 자신과 1로만 나누어 떨어진다. (단, 1은 소수가 아님)
// 1은 입력 안되므로, 2부터 n직전까지 반복문을 돌리면서 체크줘야 한다.
// 하지만 제곱근과 소수의 관계를 안다면 더 효율적으로 풀 수도 있다.
// 루트 n을 씌워 소수점을 자른 값까지만 체크하면,
// n이 소수인지 아닌지를 파악할 수 있기 때문이다.
// 풀이
// 우선 소수 체킹 함수를 구현한다.
const isPrime = (num) => {
// 우선 2로 나누어 떨어지는지 체크
if (num % 2 === 0) return false;
// 제곱근에 내림한 값으로 변환시키고
let sqrtNum = parseInt(Math.sqrt(num));
// 3부터 변환한 값까지로 나누어 떨어지는지 체크
for (let i = 3; i <= sqrtNum; i += 2) {
if (num % i === 0) return false;
}
return true;
}
// 카운트를 선언하고 반복문을 돌린다.
// count는 1로 준다. 2는 짝수 중 유일한 소수이기 때문에 카운트를 하고 시작한다.
let count = 1;
// 3부터 시작해서 n까지 돌린다. 소수인지 아닌지는 구현한 함수부로 체크한다.
for (let i = 3; i <= n; ++i) {
if (isPrime(i)) ++count;
}
return count;
}