소수(에라토스테네스 체)
문제 정보
- 사이트 : Infrean 자바 알고리즘 문제 풀이 강의
- 문제 번호 : 2강 5번
- 문제 분류 : Array
문제 풀이
내가 처음에 짠 코드
- 소수의 정의는 약수가 자신과 1밖에 없는 수이다.
- 그러므로 약수가 생기는 수를 boolean배열에서 true로 바꿔 제외시켜준다.
- 첫번째 for문의 범위는 2번째 for문과 곱셈을 해줄 것이므로 n의 절반으로 설정시켜준다.
import java.util.Scanner;
public class 소수_에라토스테네스_체 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
boolean[] nArr = new boolean[n+1];
solution(n, nArr);
for (int i = 2; i <= n; i++) {
if(!nArr[i])
count++;
}
System.out.println(count);
}
private static void solution(int n, boolean[] nArr) {
for (int i = 2; i <= n/2; i++) {
for (int j = 2; i * j <= n; j++) {
if(!nArr[i*j])
nArr[i*j] = true;
}
}
}
}
정답 코드
import java.util.Scanner;
public class 소수_에라토스테네스_체 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean[] nArr = new boolean[n+1];
System.out.println(solution(n, nArr));
}
private static void solution(int n, boolean[] nArr) {
for (int i = 2; i <= n; i++) {
if(!nArr[i]) {
for (int j = i; j <= n; j=j+i) {
nArr[i*j] = true;
}
}
}
}
}
문제 출처
Infrean 자바 알고리즘 문제 풀이
썸네일 출처
Image by storyset on Freepik