less than 1 minute read

합성수 찾기

문제 설명

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


제한사항

  • 1 ≤ n ≤ 100

입출력 예

n result
10 5
15 8

입출력 예 설명

입출력 예 #1

  • 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

입출력 예 #2

  • 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

나의 풀이 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        int compos = 0;
        
        
        for (int i=1; i<=n; i++){
            
            int div_cnt = 0;
            //약수 개수
            for (int j=1; j<=i; j++){
                if((i%j)==0){
                    div_cnt ++;
                }
            }
            if (div_cnt>2){
                compos++;
            }
        }
        
        answer = compos;
        return answer;
    }
}

배운점

import java.util.stream.IntStream;

class Solution {
    public int solution(int n) {
        return (int) IntStream.rangeClosed(1, n)
                              .filter(i -> (int) IntStream.rangeClosed(1, i)
                                                            .filter(i2 -> i % i2 == 0)
                                                            .count() > 2)
                              .count();
    }
}

다른 사람이 푼 코드를 보면 스트림을 사용하여 푼다.

스트림을 중첩하여 사용하였는데 이때 스트림 안에서 또 다른 보조 스트림을 만들고 람다표현식으로 i2를 만들어서 필터링하는 코드인것을 알 수 있다.

Leave a comment