[백준] 1978 소수 찾기 JAVA

·2024년 3월 2일

1일1백준 -Java-

목록 보기
14/60

문제

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

입력

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

출력

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

예제 입력

4
1 3 5 7

예제 출력

3

내가 했던 풀이 방법

  1. 하나의 숫자를 검사할 때마다 boolean(소수인지 아닌지)을 true로 설정한다.
  2. 숫자가 1일 경우 false로 바꾸고 count(소수 개수)를 증가하지 않는다.
  3. 숫자가 2보다 클 경우 2부터 숫자-1까지 숫자와 나눈 나머지가 0인 경우가 있는지 검사해주고, 한 번이라도 있을 경우 false로 바꾸어주고 break한다.(이를 통해 숫자 2는 자연스럽게 소수로 판별된다. 검사 식에 들어가지 않기 때문에 처음에 설정한 true 값을 받기 때문)
  4. for문을 다 돈 후 boolean의 참/거짓을 판별하여 참일 경우 count를 1 증가시켜준다.
  5. 입력받은 모든 숫자를 검사한 뒤 count를 출력해준다.

코드

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

public class Main {

public static void main(String[] args) throws IOException {

	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int size = Integer.parseInt(br.readLine());
    String[] S_number = br.readLine().split(" ");

    int number;
    boolean prime;
    int count = 0;
    for(int i=0; i<size; i++) {
        prime = true;
        number = Integer.parseInt(S_number[i]);
        if(number==1) {
            prime = false;
        } else if(number>2) {
            for(int j=2; j<number; j++) {
                if(number%j==0) {
                    prime = false;
                    break;
                }
            }
        }
        if(prime) count++;
    }

    System.out.print(count);
}

}

회고

이거보다 좀 더 간결하게 계산할 수 있는 식이 있을 것이다. 소수가 1과 자기 자신만을 약수로 가지는 수에 초점을 맞추어서 1과 자기 자신을 제외한 범위 내에서 검사를 진행하고자 코드를 짜보니, 1과 2를 따로 판별해주어야 하는 경우가 발생했기 때문에 조금 아쉬운 코드같다. (물론 2같은 경우는 자연스럽게 판별될 수 있도록 코드가 나왔지만.) 후에 소수를 계산하는 대표적인 방법을 좀 찾아보고 비교를 좀 해봐야겠다.

profile
Frontend🍓

0개의 댓글