소수 찾기

https://programmers.co.kr/learn/courses/30/lessons/12921#

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

2가지를 알고 있어야 한다.

1. Prime Number는 Root로 자신을 쒸운값 이하로 2부터 순차적으로 나누어서 나누어 지면 Prime이 아니다. 반대로 끝까지 안나누어 지면 Prime이다.

    function isPrime(digit){
        let count = Math.floor(Math.sqrt(digit));
        
        for(let i = 2; i <= count; i++){
            if(arr[i]==1)
                if(digit%i == 0) return false;
        }
        return true;
    }

2. 한번 Prime으로 선정이 된 값의 배수는 모두 Prime이 아니다.

    for(let i = 2; i <= n; i++){
        if(arr[i] == -1){
            if(isPrime(i)){
                count++;
                arr[i] = 1;
                for(let j = i+i; j <= n;j+=i){
                    arr[j] = 0;
                }
            }
        }
    }

 

상기 내용을 합치면 된다.

function solution(n) {
    let arr = new Array(n+1).fill(-1);
    let count = 0;
    for(let i = 2; i <= n; i++){
        if(arr[i] == -1){
            if(isPrime(i)){
                count++;
                arr[i] = 1;
                for(let j = i+i; j <= n;j+=i){
                    arr[j] = 0;
                }
            }
        }
    }
        
    return count;
    
    function isPrime(digit){
        let count = Math.floor(Math.sqrt(digit));
        
        for(let i = 2; i <= count; i++){
            if(arr[i]==1)
                if(digit%i == 0) return false;
        }
        return true;
    }
}

 

728x90
반응형

'Problem Solving' 카테고리의 다른 글

실패율  (0) 2020.09.03
[1차] 다트 게임  (0) 2020.09.03
서울에서 김서방 찾기  (0) 2020.09.03
문자열 다루기 기본  (0) 2020.09.03
문자열 내림차순으로 배치하기  (0) 2020.09.03