본문 바로가기
JAVA

[JAVA][백준] 1978_소수 찾기

by saemsaem 2024. 4. 15.


1. 기본 풀이

import java.util.Scanner;

public class primeNum_1978 {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        int[] num = new int[n];
        for (int i = 0; i < n; i++) {
            num[i] = sc.nextInt();
        }
        int res = 0;

        for (int i = 0; i < n; i++) {
            int j;
            for (j = 2; j < num[i]; j++) {

                if (num[i] % j == 0) {
                    break;
                }
            }
            if (num[i] == j) {
                res++;
            }
        }

        System.out.println(res);
    }
}

소수는 1과 자신만을 약수로 가지는 수를 뜻한다.

먼저, 입력받은 수를 모두 배열에 넣고,

각 숫자를 반복문으로 돌아가며

2부터 자신보다 1 작은 수를 반복하는 이중 for문 안에서 나누어떨어지는 값이 있는지 확인한다.

나누어 떨어지는 값이 있다면 소수가 아니므로 break해서 빠져나오고,

마지막 숫자로 나누었는데도 나누어떨어지는 수가 없었다면 res를 증가시켜준다


2. boolean 사용한 방법

import java.util.Scanner;

public class primeNum_1978 {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        int res = 0;

        for (int i = 0; i < n; i++) {
            int k = sc.nextInt();
            boolean isPN = true;
            if (k == 1) continue;

            for (int j = 2; j < k; j++) {

                if (k % j == 0) {
                    isPN = false;
                }
            }
            if (isPN) res++;
        }

        System.out.println(res);
    }
}

boolean값은 true로 초기화해두고,

나누어떨어지는 값이 있다면 false로 바꿔준다.

boolean값이 true일 때만 res를 증가시켜준다.