gimmickbutreal

[프로그래머스/자바] 소수찾기 - 에라토스테네스의 체 본문

Algorithm/Java

[프로그래머스/자바] 소수찾기 - 에라토스테네스의 체

isshosng 2023. 6. 25. 21:26

문제 설명

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

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

제한 조건

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

입출력 예

n result
10 4
5 3

입출력 예 설명

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

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

 

풀이 방법

1.  루트를 이용해서 중복 반복을 피해준다.

2. boolean형을 사용해서 소수를 false로 계산.

3. 1은 true로 

 

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
import java.util.*;
class Solution {
    ArrayList<Integer> list = new ArrayList<>();
    int cnt = 0;
    double sqrt = 0;
    boolean[] visited = new boolean[1000000];
    public int solution(int n) {
        visited[1= true;
        sqrt = Math.sqrt(n);
      
        for (int i=2; i<sqrt; i++){ if (visited[i] == truecontinue;
           int j=2;
            while(i*j<=n){
                visited[i*j]=true;
                j++;
            }
        }        
        for (int i=2; i<n+1; i++){
            if(visited[i] == false){
                cnt++;
            }
        }
        return cnt;
    }
}
cs

 

 

p.s. 문제 풀이를 도와준 인하대 컴공 강모군 감사합니다