[프로그래머스]합성수 찾기
합성수 찾기
문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 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