코딩 테스트

[백준] 1978번 소수 찾기 - 실버 5

한 면만 쓴 종이 2023. 1. 14. 23:04

 

뭐가 잘못된걸까..?

import java.util.Scanner;

public class B1978 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int num = s.nextInt(), res = 0;
        int[] arrayN = new int[num];
        for (int i = 0; i < num; i++) {
            arrayN[i] = s.nextInt();
        }
        System.out.println(prime(arrayN));
    }

    static int prime(int[] arrayN) {
        int res = arrayN.length;

        for (int n : arrayN) {
            if (n == 1) {
                res--;
                break;
            }
            else if (n == 2) {
                break;
            }
            else {
                for (int i = 2; i <= (n / 2) + 1; i++) {
                    System.out.println("진입");
                    if (n % i == 0) {
                        res--;
                        break;
                    }
                }
            }
        }
        return res;
    }

}

 

흠... 2로 나누어 떨어지는 거를 못 잡는거 같다 ...

 

멍청한 짓을 했군.. break를 남발하다니...

 

import java.util.Scanner;

public class B1978 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int num = s.nextInt(), res = 0;
        int[] arrayN = new int[num];
        for (int i = 0; i < num; i++) {
            arrayN[i] = s.nextInt();
        }
        System.out.println(prime(arrayN));
    }

    static int prime(int[] arrayN) {
        int res = arrayN.length;

        for (int n : arrayN) {
            if (n == 1) {
                res--;
            }
            else if (n != 2) {
                for (int i = 2; i <= (n / 2) + 1; i++) {
                    if (n % i == 0) {
                        res--;
                        break;
                    }
                }
            }
        }
        return res;
    }
}

 

따흑 드디어 성공!!

 

근데 코드가 너무 지저분하다..

 

기깔나는 코드를 짜고싶은데 ㅠ

 

 

그래서..! 찾아보았다

[백준] 1978번 : 소수 찾기 - JAVA [자바] (tistory.com)

 

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

https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 문제 드디어 새로운 카

st-lab.tistory.com

아니 무슨 소수 찾기에 이렇게 .. 해야지 그치 ㅇㅇ

 

 

방법2! 너로 정했다!!

 

제곱근을 이용한 판별법..

 

합성수 Number = A x B 에서 A와 B 중 적어도 하나는 Number의 제곱근보다 작거나 같다!

오.. 꽤나 당연한데 생각하지 못한 것이군..

 

 

import java.util.Scanner;

public class B1978Ans {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int num = s.nextInt();
        int[] arrayN = new int[num];
        for (int i = 0; i < num; i++) {
            arrayN[i] = s.nextInt();
        }
        System.out.println(prime(arrayN));
    }

    static int prime(int[] arrayN) {
        int cnt = arrayN.length;

        for (int n : arrayN) {
            if (n == 1) cnt--;
            else if (n != 2)
                for (int i = 2; i <= Math.sqrt(n); i++) {
                    if (n % i == 0) {
                        cnt--;
                        break;
                    }
                }
        }
        return cnt;
    }
}

 

맞았당..

근데 속도는 처음에 한게 더 빠르다... 역시 노가다가 속도는 빠른건가

 

위 글에서 BufferedReader 쓰는게 속도가 훨씬 빠르다는데.. 눈 아파서 내일 해봐야징