문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 <= n <= 100
입출력 예
n | result |
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문에 answer가 증가하는 조건만 다릅니다. 'arr[i] == 1'에서 'arr[i] == 0'으로 변경했습니다. 소수의 경우 arr[i] == 1이고, 합성수의 경우 'arr[i] == 0'이 되는 원리를 이용하는 것입니다. 자세한 풀이와 설명은 이전 게시글에 있습니다.
에라토스테네스의 체 방법을 이용하는 알고리즘 설명이 궁금하다면
[프로그래머스 코딩테스트] 소수 찾기(Java) https://sigfriede.tistory.com/114
'프로그래머스 > Lv. 0(코딩테스트 입문)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 7의 개수(Java) (0) | 2023.04.17 |
---|---|
[프로그래머스 코딩테스트] 숨어있는 숫자의 덧셈(2)(Java) (0) | 2023.04.17 |
[프로그래머스 코딩테스트] 영어가 싫어요(Java) (0) | 2023.04.14 |
[프로그래머스 코딩테스트] 숫자 찾기(Java) (0) | 2023.04.10 |
[프로그래머스 코딩테스트] 외계행성의 나이(Java) (0) | 2023.04.10 |