풀이
김영준
function solution(n) { let answer = 0; let end = Math.sqrt(n); // 모든 숫자를 true로 생성 const array = new Array(n + 1).fill(true); for(let i = 2; i <= end; i++){ // 이미 지워졌으면 건너 뛴다. if(array[i] === false) continue; // 자기 자신을 제외한 i의 배수들을 지운다. for( let j = i * i; j <= n; j += i){ array[j] = false; } } // 지워지지 않은 것들을 카운트 for (let i = 2; i <= n; i++){ if(array[i] === true) answer++; } return answer; }
이종현
function solution(n) { let answer = 0; const arr = new Array(n + 1).fill(true); const end = Math.sqrt(n) for (let i = 2; i <= end; ++i) { if(arr[i] === false) continue; for (let k = Math.pow(i, 2); k <= n; k += i) { arr[k] = false; } } for (let i = 2; i <= n; ++i) { if (arr[i] === true) answer++; } return answer; }
박노철
function solution(n) { const root=Math.sqrt(n) let nums=Array(n+1).fill(true); nums[0]=false; nums[1]=false; for(let i=2; i<root; i++){ if(nums[i]){ for(let j=i*i; j<=n; j+=i){ nums[j]=false; } } } return nums.filter(a=>a===true).length; }
박건우
function solution(n) { const primeArr = Array.from({length : n + 1}, (_, i) => true); let answer = 0; for(let i = 2; i * i <= n; i++){ if(primeArr[i]){ // 예를들어 i가 3이면 // 3 * 2의 경우 i가 2일때 체크했으니까 3 * 3 부터 시작하는 겁니다. // 마찬가지로 i가 4면 4*2나 4*3은 이미 이전에 체크했으니까 i * i부터 시작하는것 같습니다. for(let j = i * i; j<=n; j += i){ // i의 배수를 모두 지워줍니다. primeArr[j] = false; } } } return primeArr.filter(v => v).length - 2; } // 위키피디아 참고하여 풀었습니다. // 소수 문제가 코테 문제 중 좀 많은 것 같아요 // 해당 문제는 효율성도 따져서 아마 에라토스테네스 체를 이용하지않으면 // 실패할겁니다.
박주연
function solution(n) { /* 1. n 배열 크기의 배열 생성해서 다 true로 초기화 2. 2부터 n까지 for loop 하면서 각 숫자들의 배수들을 false로 만들기 3. 배열의 값이 true인것만 filter해서 보여주기 */ const arr = Array.from({length: n+1}, (_, i)=>true); arr[0] = false; arr[1] = false; for(let i = 2 ; i <= n ; i++ ){ if(arr[i] === true) arr[i] === false for(let j = i ; i* j <= n ; j++) arr[i * j] = false } return arr.filter((v) => v=== true).length }
이민희
function solution(n) { dp = Array(n+1).fill(true).fill(false, 0, 2) for (let i = 2; i * i <= n; i++) { if (dp[i]) { for (let j = i * i; j <= n; j += i) { dp[j] = false; } } } return dp.reduce((acc, cur) => cur ? acc + 1 : acc, 0) }