본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 - 17103번: 골드바흐 파티션 [Java]

문제: https://www.acmicpc.net/problem/17103

 

17103번: 골드바흐 파티션

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.

www.acmicpc.net

1. 코드

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		boolean[] arr = new boolean[1000001];
		Arrays.fill(arr, 2, arr.length, true);
		
		for(int i = 2; i * i <= arr.length; i++) {
			if(arr[i]) {
				for(int j = i * i; j < arr.length; j += i)
					arr[j] = false;
			}
		}
		
		while(N-- > 0) {
			int num = sc.nextInt();
			int cnt = 0;
			for(int i = 2; i <= num / 2; i++) {
				if(arr[i] && arr[num - i])
					cnt++;
			}
			System.out.println(cnt);
		}
	}
}

2. 설명

에라토스테네스의 체를 이용하여 소수들을 전부 구한 뒤 소수들 중 합이 입력한 값과 동일한 것의 개수를 출력하면 문제는 해결됩니다.