Notice
Recent Posts
Recent Comments
Link
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

UniCode

프로그래머스 LV1) 소수 찾기 본문

자바 100제

프로그래머스 LV1) 소수 찾기

Uni_code 2021. 4. 11. 14:33

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

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

제한 조건

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

 > 에라토스테네스의 체를 활용한 소수찾기 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        boolean[] sosu = new boolean[n+1]; // 소수 일 때 : false , 소수가 아닐 때 : true
        
        // sosu배열 true로 초기화
        for(int i =2; i <=n ; i++){
            sosu[i] = true;
        }
        
        // 정수 n의 제곱근 구하기
        int root = (int)Math.sqrt(n);
        
        // 2 ~ n의 제곱근까지의 배수를 확인 및 소수false값 입력
        for(int i = 2; i <= root; i++){
            if(sosu[i] == true){
                for(int j = i; i*j<=n; j++){
                    sosu[i*j]= false; 
                }
            }
        }
        // 소수의 개수 값 계산
        for(int i = 2; i <= n; i++){
            if(sosu[i] == true){
                answer++;
            }
        }
        
        return answer;
    }
}

 

 > 정수 n의 제곱근을 기준으로 2 ~ n의 제곱근의 배수를 구해 2 ~ n까지의 수에서 제외를 시켜준다.

 

 

[예시] 1 ~ 100 의 숫자 중 소수 찾기

100 의 제곱근 > 10 

2 ~ 10 까지의 소수 > 2, 3, 5, 7

 1) 2의 배수

 2) 3의 배수

3) 5의 배수

4) 7의 배수

<결과>

'자바 100제' 카테고리의 다른 글

[JAVA] 별 다이아몬드 만들기  (0) 2021.03.21