Contents

[백준 1978]소수 찾기 - JAVA 풀이

   Aug 23, 2021     1 min read     - Comments

바로가기

문제

문제


해석

  1. N개의 수가 주어졌을 때, 소수의 개수를 구하는 문제

풀이

  • 에라토스테네스의 체를 사용하여 소수를 찾는다.
    1. 1 ~ 1000의 범위가 주어졌다.
    2. 1001범위의 boolean배열을 생성(이 때, 초기값은 false이다.)
    3. 1은 소수가 아니므로 true값으로 준다.(false값이 소수이다.)
    4. 2는 소수이고 2의 배수들을 지워준다.(2, 4, 6 … 1000)
    5. 3은 소수이고 3의 배수들을 지워준다.(3, 6, 9 … 999)
    6. 4는 4번에 충족 되므로 넘어간다. 1000까지 위 과정을 반복한다.
  • 주어진 숫자의 값이 false이면 값을 더해주고 결과값을 출력한다.

코드

import java.util.*;
import java.io.*;

public class Main
{  
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());        
        StringTokenizer st = new StringTokenizer(br.readLine());  
        
        boolean[] c = calc();
        int result = 0;
        
        for(int i = 0; i < N; i++){
            if(!c[Integer.parseInt(st.nextToken())])
                result++;
        }
        System.out.println(result);
    }
    
    public static boolean[] calc(){
        boolean[] check = new boolean[1001];
        check[1] = true;
        
        for(int i = 2; i < 1001; i++){
            if(check[i])
                continue;
            for(int j = i*2; j < 1001; j+=i)
                check[j] = true;            
        }
        
        return check;
    }
}