코딩 기록/자바스크립트 알고리즘

(자바스크립트 알고리즘) 소수 찾기 - kimyang-sun

kimyang-Sun 2020. 10. 14. 23:50

자바스크립트 알고리즘 (Programmers)


문제 설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

 

제한 조건

  • n은 2이상 1000000이하의 자연수입니다.

입출력 예


문제 풀이

function solution(n) {
    let arr = [];
    for (let i = 2; i <= n; i++) {
        arr[i - 2] = i;
    }
    for (let i = 2; i <= n; i++) {
        for (let j = i + i; j <= n; j += i) {
            arr[j - 2] = 0;
        }
    }
    
    const answer = arr.filter((value) => value);
    return answer.length;
}

풀이입니다.

 

1은 제외하고 반복문으로 i = 2 부터 시작해서 n까지 반복합니다.

 

이 때, arr[i - 2] = i 를 해줌으로써 숫자가 정렬된 배열을 만듭니다.

 

그 배열에서 마찬가지로 1을 제외하고 2부터 n 까지 반복하는 반복문을 만들어주고

 

그 안에서 2중으로 반복문을 사용하여 n보다 작은 수에서 2의 배수 3의 배수 4의 배수 등에 포함되는 부분들을

 

0으로 바꾸어 줍니다.

 

그리고 filter() 를 통해서 0으로 변하지 않은 소수들만 answer 에 넣어주고 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;
}