1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
n은 2이상 1000000이하의 자연수입니다.
입출력 예
| n | result |
| 10 | 4 |
| 5 | 3 |
입출력 예 설명
입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
function solution(n) { const numArr = [2]; let index = 1; for(let i = 3; i <= n; i += 2) { numArr.push(i); } while(numArr[index] * numArr[index] <= n) { let increase = 0; if(!numArr[index]) { index++; continue; } else { increase = numArr[index]; } for(let i = index + increase; i < numArr.length; i += increase) { numArr[i] = 0; } index++; } return numArr.filter(num => num !== 0).length; }Level 1중에서 제일 마지막으로 푼 문제.
코드를 조금씩 수정해가면서 해도 도저히 효율성 통과가 안됨.
그래서 코드스피츠에서 봤던 로직을 갖다 써서 해봄.
2는 무조건 포함되어 있고, 홀수만 배열에 넣고,
특정 홀수가 소수일 때index가 자기만큼 증가한 곳에 있는 수는
반드시 합성수가 된다는 것을 보고 그 로직을 사용.