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

Rae-eun Yang·2022년 9월 12일
0

프로그래머스

목록 보기
23/83

문제 설명


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

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


제한 조건


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

입출력 예

nresult
104
53

입출력 예 설명

입출력 예 #1

1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환

입출력 예 #2

1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환


풀이 코드 (Java)

import java.util.*;

class Era {
    
    private int[] primeNumber;
    private boolean[] isPrime;
    
    Era(int n) {
        // 1부터 n까지의 소수 개수 저장
        this.primeNumber = new int[n];
        this.isPrime = new boolean[n];
        
        int count = 0;
        
        Arrays.fill(isPrime, true);
        isPrime[0] = isPrime[1] = false;
        primeNumber[0] = primeNumber[1] = 0;
        
        for(int i = 2; i < n; i++) {    
            if(isPrime[i]) {
                for(int j = i * 2; j < n; j += i) {
                    isPrime[j] = false;
                }
                count++;
            }
            
            primeNumber[i] = count;
        }
        
    }
    
    public int getPrimeNumber(int n) {
        return this.primeNumber[n];
    }
    
}

class Solution {
    
    public int solution(int n) {
        
        Era e = new Era(1000000);
        
        return e.getPrimeNumber(n);
        
    }
    
}

코드 설명

  • int[] primeNumber : 1부터 n까지의 소수 개수 저장
  • int[] isPrime : 해당 숫자가 소수인지 아닌지 판별
  • Era 클래스 : 에라토스테네스의 체를 구현해주는 클래스

성공!


profile
개발자 지망생의 벨로그

0개의 댓글