Blog

합성수 찾기

문제 #

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

  • 제한사항

    • 1 ≤ n ≤ 100

  • 입출력 예

    n result
    10 5
    15 8

나의 풀이 #

// N의 값이 2이상의 수로 나누어 떨어지면 소수가 아님을 이용
class Solution {
    public int solution(int N) {
        int cnt = 0;
        
        // 2,3은 소수이기 때문에 제외함
        for(int num = 4; num<=N; num++){
// N = x*y일때 x,y는 x ≤ √N ≤ y임을 이용하여 √N까지만 반복함으로써 시간복잡도를 줄인다.
            for(int i = 2; i<=Math.sqrt(num); i++){
                if(num%i == 0) {
                    cnt++;
                    break;
// N이하의 수인 num가 합성수일경우 더 반복하지 않고 카운트 후 다음 num으로 넘어가 더 빠르게 처리한다.
                }
            }
        }
        
        return cnt;
    }
}

다른 사람의 풀이 #

//다른 사람의 풀이중 참조할 코드를 적는다.

관련개념 학습 #

  • 에라토스테네스의 체 ( 소수를 구하는 알고리즘 )
    • k=2부터 √n이하까지 반복하여 자연수중 k를 제외한 k의 배수를 제외하는 방식
  • ctrl + p로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.
  • 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.