최대 1 분 소요

[백준 1978번] 소수 찾기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package _1월_2주차;
 
import java.util.Scanner;
public class 백준_손수경_정답_1978 {
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int cnt = sc.nextInt();
        int primeNum;
        int i, j, count = 0;
        
        for (i = 0; i < cnt; i++) {
            boolean is_Prime = true//처음에는 int flag = 0;을 통해서 현재의 is_Prime과 같은 역할로 사용했지만 백준에서는 boolean을 필요로 하는 것 같음,,
            primeNum = sc.nextInt();
            
            if (primeNum == 1) {
                continue;
            }
            else if (primeNum == 2 || primeNum == 3) {
                count++;
            }
            else {
                for (j = 2; j < primeNum; j++) {
                    if (primeNum % j == 0) {
                        is_Prime = false;
                        break;
                    }
                    
                }
                if (is_Prime == true) {
                    count++;
                }
            }
        }
        System.out.println(count);
        
    }
}
 
cs


  1. 소수인지 아닌지 판별하는 방법: 1은 소수가 아니므로 continue를 통해서 다음 숫자를 입력받도록 한다. 2와 3은 소수지만, else문의 규칙에 맞지 않으므로 따로 빼서 else if문을 만들어 소수임을 count했다. else문의 조건문에서 j <= Math.sqrt(primeNum); 을 사용해도 되지만 백준에서는 딱히 신경쓰지 않는 것 같다. 하지만 수가 커지게 될수록 입력받은 수의 제곱근의 범위 내에서 반복문을 돌리는 것이 효율적임을 알 수 있다.
  2. 처음에는 int flag = 0 을 사용하여서 소수이면 flag = 0, 소수가 아니면 flag = 1 로 처리하게끔 코드를 짰다. 하지만 백준에서 계속 틀렸다고 나와서 구글링을 해보니 boolean 이라는 자료형을 사용하여 소수이면 is_Prime = true, 소수가 아니면 is_Prime = false를 이용했다.

배운 점

어떤 조건이 참인지 거짓인지를 판별할 때는 int를 사용하기보다는 boolean을 사용하자!

댓글남기기