Solution 1
미리 배열을 만들고 인덱스를 값으로 넣어준다.
배수이면 0을 할당하는 방법으로 0이 아니면 소수라고 할 수 있다.
private int solution(int n) {
// 배열의 인덱스에 맞게 값으로 넣어준다.
int[] a = new int[n+1];
for (int i = 2; i <= n ; i++) {
a[i] = i;
}
// 이미 지워진 숫자가 아니라면, 그 배수부터 출발하여, 가능한 모든 숫자 지우기
// 2이라면 4부터, 3이라면 6부터 시작하고
for (int i = 2; i <= n; i++) {
if (a[i] == 0) continue; // 이미 지워졌다면 다음 반복으로
for (int j = 2*i; j <=n ; j+=i) {
a[j] = 0; // 배수 지우기
}
}
int count = 0;
for (int i = 2; i <=n ; i++) {
if (a[i] != 0) count++; // 지워지지 않았다면 소수이다.
}
return count;
}
Solution 2 (강사님 풀이)
개념은 비슷한 거 같은데 간결하다.
private int solution(int n) {
int count = 0;
int[] ch = new int[n + 1];
for(int i=2; i<=n; i++) {
if (ch[i]==0) {
count++;
for (int j = i; j<= n; j+=i){
ch[j] = 1;
}
}
}
return count;
}
'알고리즘 > 인프런_자바코테강의' 카테고리의 다른 글
인프런 7. 점수계산 (Java) (0) | 2022.04.21 |
---|---|
인프런 6. 뒤집은 소수 (Java) (0) | 2022.04.20 |
인프런 4. 피보나치 수열(Java) (0) | 2022.04.20 |
인프런 3. 가위 바위 보 (Java) (0) | 2022.04.20 |
인프런 2. 보이는 학생 (Java) (0) | 2022.04.20 |