[2021-05-05] 소수 찾기

2021. 5. 5. 00:06코딩테스트

푼 시간 : 30분

언어 : 자바

 


 

전에 에라토스테네스의 체 로 풀어야만 한다는 글을 보고

안 풀어놓고 까먹었는데,

 

오늘 다시 보게 됐다..

이해가 안된다면 알고리즘 항목에 있는 에라토스 테네스의 체를 보면

금방 이해가 되실 것 같다.

 

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = 0;

        int[] filter = new int[n + 1];
        Arrays.fill(filter, 1);
        // 필터에 1을 채운다.
        filter[0] = 0;
        filter[1] = 0;
        // 0과 1은 소수가 아님을 미리 필터링 한다.

        for (int i = 2; i < Math.sqrt(n) + 1; i++){
        // 제곱근+1의 범위
            if (filter[i] == 1){
                for (int j = i * 2; j <= n; j+=i){
                // 2의 배수를 다 지우고, +1을 해서 또 3의 배수를 지우고,
                +1을 해서 4의 배수를 지우고 ....
                    filter[j] = 0;
                    // 배수는 다 0으로 필터링
                }
            }
        }

        for (int check: filter){
            if (check == 1){
                answer++;
            }
            // 필터에 안걸린 살아남은 1들만이 소수
        }
        
        return answer;
    }
}

'코딩테스트' 카테고리의 다른 글

[2021-05-27] 두 개 뽑아서 더하기  (0) 2021.05.27
[2021-05-25] 약수의 개수와 덧셈  (0) 2021.05.25
[2021-05-03] 음양 더하기  (0) 2021.05.03
[2021-05-01] 모의고사  (0) 2021.05.01
[2021-04-29] K번째 수  (0) 2021.04.29