반응형

17103번 - 골드바흐 파티션

 

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

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

		boolean[] primeNum = new boolean[1000001]; // false는 소수, true는 소수가아님

		primeNum[0] = primeNum[1] = true;

		for (int i = 2; i < primeNum.length; i++) { // 미리 골드바흐의 추측에 따른 소수값 구하기

			if (primeNum[i] == false) {

				for (int j = 2; i * j < primeNum.length; j++) {
					primeNum[i * j] = true;
				}
			}

		}

		for (int testCase = 0; testCase < T; testCase++) {

			int N = Integer.parseInt(br.readLine());
			int partitionCount = 0;

			for (int idx = 2; idx <= N / 2; idx++) {
				if (primeNum[idx] == false) { // 소수일 때
					if (primeNum[N - idx] == false) { // N- 소수 = 소수일때
						partitionCount++;
					}
				}
			}
			bw.write(partitionCount + "\n");
		}

		bw.flush();
		bw.close();
	}

}

 

정답을 맞춘 풀이방법

1 . 100만까지의 수에 대한 소수 판별을 boolean 배열에 true, false로 구분해 놓음

2. 입력된 수 N에 대해 N/2까지 소수값을 구하면서  구한 소수값 + N - 소수값 = 소수값이면 골드바흐의 파티션 임을 판별함

3. 파티션의 개수 입력 후 출력

반응형

'알고리즘 > 백준 문제[추후 옮길예정]' 카테고리의 다른 글

[JAVA] 백준 2745번  (0) 2021.05.18
[JAVA] 백준 11005번  (0) 2021.05.18
[JAVA] 백준 2089번  (0) 2021.05.18
[JAVA] 백준 1373번  (0) 2021.05.17
[JAVA] 백준 17087번  (0) 2021.05.17

+ Recent posts