[JAVA] 백준 1978번 : 소수 찾기

조예빈·2024년 6월 29일
0

Coding Test

목록 보기
21/138

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

초반 코드

따로 소수인지 아닌지를 저장해 주는 값이 필요가 없다고 생각하였다. 하지만, 아래의 내가 작성한 코드는 num값이 소수가 아니어도 cnt가 증가한다. 즉, 내부의 for문을 다 돌리고 나서 이 수가 소수인지 아닌지를 판단한 후 cnt값을 증가시켜 주어야 하는 것이다.

package bronze2;

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

public class num1978 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String[] input = br.readLine().split(" ");
        int cnt = 0;
        for (int i = 0; i < N; i++) { //배열의 각 요소를 순회하는 for문
            int num = Integer.parseInt(input[i]);
            if (num == 1) {
                cnt++;
            }
            for (int j = 2; j <= (int) Math.sqrt(num); j++) { //2부터 그 수의 제곱근까지 나눠보면 소수인지 아닌지 판별 가능
                if (!(num % j == 0)) {
                    cnt++;
                }
            }
        }
        System.out.println(cnt);
        br.close();
    }
}

정답 코드

여기서 유의해야 할 점은 '1은 소수가 아니다'라는 것이다. 또한, 입력이 0보다 작을 수도 있다는 것이다. 이 두가지 케이스를 처음부터 따지지 못해 많이 실패했었다 ㅠㅠ


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 N = Integer.parseInt(br.readLine());
        String[] input = br.readLine().split(" ");
        int cnt = 0;
        for (int i = 0; i < N; i++) { //배열의 각 요소를 순회하는 for문
            int num = Integer.parseInt(input[i]);
            boolean isPrime = true;

            for (int j = 2; j <= (int) Math.sqrt(num); j++) { //2부터 그 수의 제곱근까지 나눠보면 소수인지 아닌지 판별 가능
                if (num % j == 0) { //나누어 떨어지는 수가 있으면
                    isPrime = false; //소수가 아님
                    break;
                }
            }
            if(num > 1 && isPrime){ //내부 for문이 다 끝나고 난 후에도 isPrime이 true이면 소수이므로 cnt 증가
                cnt ++;
            }
        }
        System.out.println(cnt);
        br.close();
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글