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