Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 1644. 소수의 연속합 본문

acmicpc

[BAEKJOON] 1644. 소수의 연속합

코드와이 2021. 6. 17. 14:25

 

문제링크

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

 

1644번: 소수의 연속합

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

www.acmicpc.net

 

package acmicpc.Gold3;

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

public class 소수의_연속합 {

	static List<Integer> list;
	static int n, ans;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		
		// 에라토스테네스의_체 알고리즘
		List<Boolean> prime = new ArrayList<>();
		prime.add(false);
		prime.add(false);
		for(int i = 2 ; i <= n ; i++) {
			prime.add(true);
		}
		
		for(int i = 2 ; i*i <= n ; i++) {
			if(prime.get(i)) {
				for(int j = i * i ; j <= n ; j += i) {
					prime.set(j, false);
				}
			}
		}
		
		list = new ArrayList<>();
		for(int i = 2 ; i <= n ; i++) {
			if(prime.get(i)) {
				list.add(i);
			}
		}
		ans = 0;
		
		int startIdx = 0;
		int endIdx = 0;
		int sum = 0;
		
		// 투 포인터 알고리즘
		while(true) {
			
			if(sum >= n) {
				sum -= list.get(startIdx++);
			} else if(endIdx == list.size()) break;
			else {
				sum += list.get(endIdx++);
			}
			
			if(sum == n) ans++;
		}
		
		System.out.println(ans);
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 17144. 미세먼지 안녕!  (0) 2021.06.22
[BAEKJOON] 5014. 스타트링크  (0) 2021.06.20
[BAEKJOON] 2146. 다리 만들기  (0) 2021.06.16
[BAEKJOON] 11066. 파일 합치기  (0) 2021.06.16
[BAEKJOON] 16234. 인구 이동  (0) 2021.06.16