-
17103) 골드바흐 파티션 - Java백준코딩일기 2020. 1. 29. 20:44
문제 ) https://www.acmicpc.net/problem/17103
17103번: 골드바흐 파티션
첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.
www.acmicpc.net
풀이 )
에스테네스의 체 와 관련된 문제를 다 한번에 푸니까 빠르게 응용도 되고 더 이해가 빨리된다.
가능하다면 이 글을 보시는 분들도 1929 번부터 쭉풀어보길 ... 추천한다!
처음에는 진입조차 어려웠고, 왜 이렇게 풀어야하나 싶었지만 이방법이 가장 쉬운..? 방법인것같은 생각이다.
27번 줄에 for문 조건을 i <= n/2로 했는데,
primeNum[i] 와 PrimeNum[n-1] 를 둘다 이미 비교하고 있어서 절반을 넘기면 숫자가 겹치므로 반으로 줄였다.코드 )
1234567891011121314151617181920212223242526272829303132333435public 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));boolean[] primeNum = new boolean[1000001];for(int j=2; i*j<1000001; j++) { // 소수가 아닌 수를 모두 true로 바꾸는 작업// 이미 검사가 되어 true 값이 들어갔다면 넘어감if( primeNum[i*j]) continue;// 아직 검사가 안된값이라면 true 값을 넣음// ex). i=2, j=2 이면 i*j=4 의값이 true가 됨primeNum[i*j] = true;}}int T = Integer.parseInt(br.readLine());while( T-- > 0) {int n = Integer.parseInt(br.readLine());int count = 0;for(int i=3; i<=n/2; i++) { // 절반을 넘어가면 수가 겹치므로 n의 반만 확인한다.if( !primeNum[i] && !primeNum[n-i])count++;}}}} cs'백준코딩일기' 카테고리의 다른 글
11652) 카드 - JAVA (0) 2020.03.08 10825) 국영수 - Java (0) 2020.02.19 9020) 골드바흐의 추측 (0) 2020.01.29 6588) 골드바흐의 추측 (0) 2020.01.29 1929) 소수 구하기 - Java (0) 2020.01.29