문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
n은 2이상 1000000이하의 자연수입니다.
import java.util.*;
class Solution {
public int solution(int n) {
boolean[] isPrime = new boolean[n + 1];
Arrays.fill(isPrime, true); // 모든 수를 소수로 가정
// 0과 1은 소수가 아님
isPrime[0] = false;
isPrime[1] = false;
// 에라토스테네스의 체
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) { // i가 소수라면
// i의 배수들은 모두 소수가 아님
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
// 소수의 갯수 세기
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
count++;
}
}
return count;
}
}
에라토스테네스의 체
'프로그래머스 > java' 카테고리의 다른 글
의상 [프로그래머스_java] (0) | 2023.09.07 |
---|---|
폰켓몬 [프로그래머스_java] (0) | 2023.06.27 |
같은 숫자는 싫어 [프로그래머스_java] (0) | 2023.06.26 |
피보나치수 [프로그래머스_java] (0) | 2023.06.22 |
체육복 [프로그래머스_java] (0) | 2023.06.22 |