BOJ_1644_소수의 연속합_java

2023. 2. 14. 22:21Algorithm/BOJ

728x90

https://www.acmicpc.net/problem/1644

 

1644번: 소수의 연속합

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)

www.acmicpc.net

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

/**
 백준 1644번 소수의연속합
 골드 3
 */
public class BOJ_1644_소수의연속합 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        System.out.println(solution(N));

    }

    public static int solution(int N){
        boolean[] primeNum = findPrimeNumbers(N);
        List<Integer> primenumSum = getPrimenumSum(primeNum);

        int cnt = 0;

        int start = 0, end = 0, sum=0;
        while (true){
            if(sum >= N ) sum -= primenumSum.get(start++);
            else if(end == primenumSum.size()) break;
            else sum += primenumSum.get(end++);
            if(N==sum) cnt++;
        }

        return cnt;
    }

    // 시작부터 각 위치까지의 연속합
    public static List<Integer> getPrimenumSum(boolean[] primeNum){
        int size = primeNum.length;
        List<Integer> primeSumList = new ArrayList<>();

        for (int i = 1; i<size; i++){
            if (!primeNum[i]){
                primeSumList.add(i);
            }
        }

        return primeSumList;
    }

    // 에라토스테네스의 체
    public static boolean[] findPrimeNumbers(int N){
        boolean[] primeNum = new boolean[N+1];
        primeNum[0] = primeNum[1] = true;
        for (int i = 2; i<=Math.sqrt(N); i++){
            if (!primeNum[i]){
                for (int j = i*i; j <=N; j+=i){
                    primeNum[j] = true;
                }
            }
        }
        return primeNum;
    }


}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ_12100_2048(Easy)_java  (0) 2023.02.22
BOJ_1202_보석 도둑_java  (0) 2023.02.18
BOJ_16724_피리 부는 사나이_java  (0) 2023.02.13
BOJ_9466_텀 프로젝트_java  (0) 2023.02.13
BOJ_2342_Dance Dance Revolution_java  (0) 2023.02.10