[ Baekjoon ] 1978번 ( SILVER IV ) : 소수 찾기 (Java)

ma.caron_g·2022년 1월 7일
0
post-thumbnail

1. Problem 📃

[ 소수 찾기 ]

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


[ 문제 ]

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


2. Input 📇

[ 입력 ]

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


3. Output 📠

[ 출력 ]

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


4. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력

4

1 3 5 7

3

5. Solution 🔑

  1. 몇 개 입력 받을지에 대한 변수(N)을 선언하고 입력 받는다.
    입력 받은 정수에 대해 몇 개가 소수일지 카운트 해줄 변수(count)를 0으로 초기화하여 선언한다.

  2. 입력 받을 개수 N만큼 루프를 돌려 입력 된 정수가 소수인지 판단한다.
    소수인지 판단할 boolean변수(prime)를 true로 설정하고 입력 받은 수(t)를 판단 검사한다.
    여기서 판단한 방법은 t가 1일 때 제외 하고 t를 2부터 t-1 까지 하나씩 나누어보면서 검사하였다.
    이때, 나누어 떨어지는 수가 있으면 boolean변수 (prime)을 false로 변경하고, 소수 검사를 break;한다.
    만약 소수 검사를 마치고 prime 변수가 true값이라면 count를 증가시켜 소수 개수를 세어준다.

6. Code 💻

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt((st.nextToken()));
		int count = 0;
		st = new StringTokenizer(br.readLine(), " ");
		for(int i=0; i<N; i++) {
			boolean prime = true;
			int t = Integer.parseInt(st.nextToken());
			if(t==1) {
				continue;
			}
			for (int j = 2 ; j < t; j++) {
				if (t % j == 0) {
					prime = false;
					break;
				}

			}
			if (prime == true) {
				count++;
			}
		}
		System.out.println(count);

	}

}

7. Growth 🍄

조금 더 빠르게 검사해보고자 입력 받은 수 t의 제곱근까지 나누어 나머지를 검사 하였는데 오히려 시간은 같 고 메모리가 더 들어서 t까지 돌리는 코드를 작성하였다.
왜 그럴까...
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글