P.1978 소수 찾기

castlehi·2022년 2월 23일
0

CodingTest

목록 보기
7/67
post-thumbnail

1978 소수 찾기

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB102604485613924747.643%

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

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

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1

4
1 3 5 7

예제 출력 1

3

코드

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class P_1978 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        int[] array = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        ArrayList<Boolean> list = new ArrayList<>(1001);
        list.add(false);
        list.add(false);
        for (int i = 2; i <= 1000; i++)
            list.add(i, true);
        for (int i = 2; i * i <= 1000; i++) {
            if (list.get(i)) {
                for (int j = i * i ; j <= 1000; j+=i) list.set(j, false);
            }
        }

        int cnt = 0;

        for (int num : array) {
            if (list.get(num))
                cnt++;
        }
        bw.write(Integer.toString(cnt));
        bw.flush();
    }
}

코드 설명

에라토스테네스의 체를 이용했다.
자료형이 boolean인 ArrayList를 선언해 소수일 경우 true로 설정하고, 합성수일 경우 해당 인덱스를 false로 설정했다.

먼저, 소수가 아닌 0과 1은 false로 설정을 해 두고 시작을 하고, 나머지 수는 for문을 통해 true로 설정을 한다.

그리고 2부터 2를 약수로 가지는 모든 수를 false로 바꿔준다.

profile
Back-end Developer

0개의 댓글

관련 채용 정보