본문 바로가기

알고리즘

[백준 - 1644] 소수의 연속합 - Java

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

 

1644번: 소수의 연속합

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

www.acmicpc.net

 

에라토스테네스의 체를 사용해서 푼 간단한 문제이다.

에라토스테네스의 체를 사용해서 2부터 입력된 숫자까지의 소수를 구하여 새로운 Array에 저장하고,

찾은 소수와 합해서 입력된 숫자가 되는 다른 소수가 있는지 찾는다.

 

 

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        ArrayList<Integer> primes = new ArrayList<>();

        boolean[] isNotPrime = new boolean[N+1];
        isNotPrime[0] = isNotPrime[1] = true;
        for(int i=2; i<=N; i++){
            if(!isNotPrime[i]){
                primes.add(i);
                for(int j=i*2; j<=N; j+=i){
                    isNotPrime[j] = true;
                }
            }
        }
        int count = 0;
        int p1 = 0, p2 = 0;
        while(p1<primes.size()){
            int sum = 0;
            while(p2<primes.size()){
                sum += primes.get(p2);
                if(sum > N) {
                    p1++;
                    p2 = p1;
                    break;
                }
                else if(sum ==  N){
                    count ++ ;
                    p1 ++;
                    p2 = p1;
                    break;
                }
                else {
                    p2++;
                }
            }
            if((p1+1)==primes.size()&&p2==primes.size()) {
                break;
            }
        }

        System.out.println(count);

    }
}

'알고리즘' 카테고리의 다른 글

[백준 - 9202] Boggle - Java  (0) 2022.02.14
[백준 - 7578] 공장 - Java  (0) 2022.02.09
[백준 - 2243] 사탕상자 - Java  (0) 2022.02.08
[백준 - 2042] 구간 합 구하기 - Java  (0) 2022.02.08
[백준 - 1202] 보석 도둑 - Java  (0) 2022.02.07