[백준/JAVA] 17103번 골드바흐 파티

정은아·2024년 2월 6일

[알고리즘] 수학 모음

목록 보기
27/152
post-thumbnail

내 풀이

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 입력받은 N을 소수 + 소수로 구한다.
        // 이 때, 몇 가지 방법으로 나타낼 수 있나?

        // 배열을 100만+1 까지 받는다.
        // 에라토스테네스 체를 이용해서 미리 소수들을 뽑아놓는다.
        // 그 후, 값을 입력받는다.
        // for문을 값만큼 돌린다.
        // 다시 for문을 1/2만큼 돌린다.(같은 수가 위치 다르게 나오는거 방지)
        // if (prime[j] == 1 && prime[n - j] == 1)면 소수합으로 이루어지니까
        // count++한다

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        int[] arr = new int[1000001];
        int[] prime = new int[1000001];
        int count = 0;

        for (int i = 2; i < arr.length; i++) {
            if (arr[i] == 0) {
                prime[i] = 1;
            }

            for (int j = i; j < arr.length; j += i) {
                arr[j] = 1;
            }
        }

        int num = sc.nextInt();

        for (int i = 0; i < num; i++) {
            count = 0;
            int n = sc.nextInt();

            for (int j = 1; j <= n/2; j++) {
                if (prime[j] == 1 && prime[n - j] == 1) {
                    count++;
                }
            }
            sb.append(count);
            sb.append("\n");
        }

        System.out.println(sb.toString());

    }
}

느낀점

에라토스테네스 체 를 이용해서 먼저 소수를 다 구해놓고
소수의 합끼리 구해지는지 확인해서 count++ 하는 문제였다.
어렵다~~~

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글