일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 소수 판정
- 브루트포스 알고리즘
- 백트래킹
- dfs
- DB
- 문자열
- 깊이 우선 탐색
- 자료 구조
- 프로그래머스
- n과 m
- 정수론
- 수학
- 너비 우선 탐색
- 스택
- 프로젝트
- 정보처리기사
- 다이나믹 프로그래밍
- Vue
- MYSQL
- 재귀
- 구현
- SWEA
- 그래프 이론
- JPA
- 백준
- 배포
- Spring Security
- springboot
- 그래프 탐색
- 알고리즘
Archives
- Today
- Total
영원히 남는 기록, 재밌게 쓰자
백준 [17103] 골드바흐 파티션 (자바) 본문
728x90
반응형
문제
입력
첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.
출력
각각의 테스트 케이스마다 골드바흐 파티션의 수를 출력한다.
풀이
- 소수 배열을 만들고 소수를 구한다. 소수를 구하는 방법은 에라토스테네스의 체를 활용한다.
- 정수 N에 대해서 소수를 뺀 나머지가 소수이면 두 소수의 합으로 나타낼 수 있으므로 카운트한다.
전체코드
package com.baekjoon.p17103;
import java.io.*;
public class Main {
static boolean[] isPrime;
static final int num = 1000001;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 소수 구하기
isPrime = new boolean[num];
for (int i = 2; i < num; i++) {
isPrime[i] = true;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (!isPrime[i])
continue;
for (int j = i * i; j < num; j += i) {
isPrime[j] = false;
}
}
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while (T-- > 0) {
int N = Integer.parseInt(br.readLine());
int cnt = 0; // 합이 짝수이면 카운트
// 절반 이상을 넘겨서 탐색을 하면 중복되는 수열이 발생해서 N / 2까지만 탐색
for (int i = 2; i <= N / 2; i++) {
if (isPrime[i]) { // 해당 수가 소수 일 때
if (isPrime[N - i]) { // 그 수만큼 뺀 수가 소수라면 카운트
cnt++;
}
}
}
sb.append(cnt + "\n");
}
System.out.println(sb);
}
}
728x90
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 [15990] 1, 2, 3 더하기 5 (자바) (0) | 2024.05.24 |
---|---|
백준 [1138] 한 줄로 서기 (자바) (0) | 2024.05.21 |
백준 [2477] 참외밭 (자바) (0) | 2024.05.19 |
백준 [15665] N과 M (11) (0) | 2024.05.17 |
백준 [15664] N과 M (10) (0) | 2024.05.17 |