[프로그래머스 | Javascript] 소수 찾기

박기영·2022년 9월 12일
0

프로그래머스

목록 보기
16/159
post-custom-banner

solution

function solution(n) {
	// 에라토스테네스의 체
	// 1. 2부터 N까지의 자연수를 나열
	// 2. 처리되지 않은 수 중 가장 작은 수 i를 찾음
	// 3. i의 배수를 모두 제거(i는 제거하지 않음)
	// 4. 더 이상 반복할 수 없을 때까지 2,3번을 반복
  
  	// n + 1개의 true 원소를 가지는 배열 생성
    // 각 인덱스는 0 ~ n의 숫자를 표현
    let isPrime = new Array(n + 1).fill(true);
    
    // 0과 1은 소수가 아니므로 false
    isPrime[0] = false;
    isPrime[1] = false;
    
    // 에라토스테네스의 체
    for(let i = 2; i*i <= n; i++){
        if(isPrime[i]){
            // 소수의 배수는 소수가 아니므로, 그 것들을 찾아내기 위해 곱 연산 진행
            let multiple = 2;
    
            // 연산은 n보다 작을 때까지 진행할 것
            while(i * multiple <= n){
                isPrime[i * multiple] = false;
      
                multiple++;
            }
        }
    }
    
    // true인 것들만 filter로 남겨놓는다. 소수만 남긴다는 뜻.
    let prime = isPrime.filter((item) => item === true);
    
    return prime.length;
}

에라토스테네스의 체를 사용하면 효율성 테스트도 해결할 수 있다.
시간이 적게 걸리기 때문이다.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글