문제 설명
약수가 3개 이상인 수를 합성수라고 합니다.
자연수 n이 매개변수로 주어졌을 때, n보다 작거나 같은 합성수의 개수를 반환하도록 풀이 함수를 완성하십시오.
제한
- 1 <= n <= 100
I/O 예시
N | 결과 |
10 | 5 |
15 | 8 |
class Solution {
public int solution(int n) {
int() arr = new int(n + 1);
for (int i = 2; i <= n; i++) {
arr(i) = 1;
}
for (int i = 2; i <= (int)Math.sqrt(n); i++) {
if (arr(i) == 0) {
continue;
}
int num = i * 2;
while (num <= n) {
arr(num) = 0;
num += i;
}
}
int answer = 0;
for (int i = 2; i < arr.length; i++) {
if (arr(i) == 0) {
answer++;
}
}
return answer;
}
}
소수를 찾는 문제와 동일합니다.
마찬가지로 에라토스테네스의 체 방법이 사용되었습니다.
그러나 유일한 차이점은 마지막 for 문에서 응답이 증가하는 조건입니다.
‘arr(i) == 1’에서 ‘arr(i) == 0’으로 변경되었습니다.
소수의 경우 arr(i) == 1이고 합성수의 경우 ‘arr(i) == 0’입니다.
자세한 설명과 설명은 이전 게시물에 있습니다.
에라토스테네스의 체법을 이용한 알고리즘 설명이 궁금하시다면
(프로그래머 코딩 테스트) 소수 찾기(Java) https://sigfriede.114