function solution(n) {
const answer = [];
const numbers = new Array(n + 1).fill(true);
numbers[0] = numbers[1] = false;
for(let i = 2; i <= Math.sqrt(n); i++){
if (numbers[i]) {
for(let j = i * i; j<=n; j+=i){
numbers[j] = false;
}
}
}
for(let z = 2; z <= n; z++){
if(numbers[z]){
answer.push(z);
}
}
console.log(answer);
return answer.length;
}
function solution(n) {
const s = new Set();
for(let i=1; i<=n; i+=2){
s.add(i);
}
s.delete(1);
s.add(2);
for(let j=3; j<Math.sqrt(n); j++){
if(s.has(j)){
for(let k=j*2; k<=n; k+=j){
s.delete(k);
}
}
}
return s.size;
}
소수 만들기에 이어서 바로 소수 찾기가 있었다.
그래서 이전에 사용했던 에라토스테네스의 체를 사용했다.
근데 Set 함수를 이용해서 푸는 방법도 있었다.
다른 답을 해석하면 우선 Set 함수를 사용해서 중복된 값을 없애고 s에 1부터 n까지 홀수를 추가했다.
그 이후 1은 소수가 아니기에 삭제하고 2는 소수이기에 추가했다.
3부터 n의 제곱근까지 1씩 더하고 s에 j가 있을 경우 n이랑 같을 때까지 k를 2씩 곱했다. 그리고 k를 j 만큼 증가시키면서 반복했다.
그 이후 해당 숫자가 있을 경우 s에서 삭제했다.
이렇게 될 경우 2부터 n까지 소수만 남게되는데 해당 사이즈를 리턴하여 출력했다.
효율로 따지면 Set함수가 더 좋다! 대단하다 !