본문으로 바로가기

[백준 1644] 소수의 연속합 자바 //le_effort//

category 알고리즘 2020. 2. 28. 14:44

1806번 문제와 비슷한 문제이다 

https://suhyeokeee.tistory.com/2

 

백준 1806 부분합 자바 //le_effort//

부분합을 구하는 문제이다 N이 100,000 으로써 일반적인 2중반복문을 한다면 O(N^2)으로 1초안에 들어오지 못해 오답을 받는다. 이를 해결하기 위해선 투포인터 알고리즘을 쓰면 된다. 1 2 3 4 5 6 7 8 9 10 11 1..

suhyeokeee.tistory.com

위 문제와 똑같은 투포인터 알고리즘으로 1806번 문제와는 달리 소수의 연속합을 구하는 것이다

이 문제에선 sum이 목표치와 도달하면 cnt를 증가 시켜주면 된다

 

소수를 구하는 알고리즘은 에라토스테네스의 체를 사용했다

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.*;
import java.util.*;
public class Main {
    static int n;
    static boolean prime[];
    static ArrayList<Integer>prime_list = new ArrayList<>();
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        n = Integer.parseInt(br.readLine());
        prime = new boolean[n+1];
        isPrime();
        for(int i=2; i<=n; i++) {
            if(!prime[i]) {
                prime_list.add(i);
            }
        }    // 소수를 넣어준다
        
        
        int start =0,end=0,sum=0,cnt=0;
        while(true) {
            if(sum==n) {
                cnt++;
                sum-=prime_list.get(start);
                start++;
            }
            else if(sum>n) {
                sum-=prime_list.get(start);
                start++;
            }
            else if(end == prime_list.size()) {
                break;
            }
            else {
                sum+=prime_list.get(end);
                end++;
            }
        }
        System.out.println(cnt);
    }
    public static void isPrime() {
        for(int i=2; i<=n;i++) {
            for(int j=i*2; j<=n; j+=i) {
                prime[j] = true;
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs