[ 다먹살 ]/- Coding

[백준] 1978 소수 찾기

엉망으로살기 2021. 9. 18. 18:19
반응형

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

소수를 찾는 문제는 프로그래머스에서 은근히 꽤 나왔던 것 같아서 여러 방법으로 해결해보려고 하고 있다. 그런데 정확성이나 효율성을 전반적으로 따져봤을 때 에라스토텔레스의 체를 이용해서 구하는 방법이 제일 좋아보여서 이 방법을 최대한 이용해보려고 한다.

 


문제 및 입출력

 


코드

import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        if(n<=1)
        {
            System.out.println(0);
            return;
        }
        
        // 최대값 1000으로 설정
        int cnt = 0;
        boolean[] arr = new boolean[1001];        
        arr[0] = false;
        arr[1] = false;
        
        // 에라스토텔레스의 체 구현
        for(int i=2; i<1001; i++)
        {
            arr[i] = true;
        }
        
        for(int i=2; i*i<1001; i++)
        {
            if(arr[i])
            {
                for(int j=i*i; j<1001; j+=i)
                {
                    arr[j] = false;
                }
            }        
        }
        
        // 입력받은 값들이 소수이면 +해서 결과 출력
        for(int i=0; i<n; i++)
        {
            if(arr[sc.nextInt()])
            {
                cnt++;
            }
        }
        
        System.out.println(cnt);
    }
}

 

반응형