알고리즘/JAVA

[JAVA] 소수찾기 - 프로그래머스

야아옹 2020. 10. 21. 16:58

문제 : 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

 

풀이 : 에라토스테네스의 체! C# 에서는 Bool 배열을 만들어서 진행 하였고 Java 에서는 주어진 n 까지의 배열을 만드는 것부터 시작해서 풀게 되었다!

 

package com.company;


import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Find_PrimeNumber {
    public static void main(String[] args) {
        System.out.println(solution(10));
    }
    public static int solution(int n) {
        long answer = 0;

        int[] _intList;
        Stream<Integer> intStream  = IntStream.rangeClosed(0,n).boxed();
        _intList = intStream.mapToInt(Integer::intValue).toArray();
        _intList[0]= 0;
        _intList[1]= 0;

       for (int i = 2; i*i <= n; i++)
       {
           if (_intList[i]==0) continue;
           for (int j = i + i; j <= n; j+=i)
               _intList[j]=0;
       }
        answer = Arrays.stream(_intList).filter(x -> x != 0).count();
        return (int)answer;
    }
}