본문 바로가기
Beakjoon&프로그래머스/Java

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

by 현장 2025. 12. 26.

-Code

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

public class BOJ17103 {
    static boolean[] primes = new boolean[1000001];
    static {
        Arrays.fill(primes, true);
        primesCalc();
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));


        int t = Integer.parseInt(br.readLine());


        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());
            int answer = 0;

            for (int j = 2; j <= n / 2; j++) {
                int gap = n - j;
                // 현재 소수 값이고 n에서 소수값 뺀 결과가 소수인 경우 +1
                if (primes[j] && primes[gap]) {
                    answer++;
                }
            }
            System.out.println(answer);
        }
    }

    private static void primesCalc() {
        for (int i = 2; i * i < 1000001; i++) {
            for (int j =  i + i; j < 1000001; j += i) {
                if (primes[j]) {
                    primes[j] = false;
                }
            }
        }
    }
}

처음에는 소수를 계속 검사해서 구하는 방법을 썼으나 이러면 시간 문제가 생겨서 미리 만들어 놓으라는 힌트를 보고 해결했습니다.