1644번 : 소수의 연속합 [Java]

2021. 4. 20. 21:47Algorithm/백준

반응형

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

 

1644번: 소수의 연속합

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

www.acmicpc.net

 

해결 방안

먼저 에라토스테네스의 체를 사용해 N까지의 소수를 구한다. 구한 소수를 arraylist에 넣은 뒤 투포인터를 사용해 경우의 수를 구한다.

 

전체 코드

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	static int N;
	static boolean[] arr;
	static ArrayList<Integer> list;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		arr = new boolean[N + 1];
		list = new ArrayList<>();

		arr[0] = arr[1] = true;
		for (int i = 2; i * i <= N; i++) {
			if (!arr[i]) {
				for (int j = i * i; j <= N; j += i) {
					arr[j] = true;
				}
			}
		}

		for (int i = 1; i <= N; i++) {
			if (!arr[i])
				list.add(i);
		}

		int start = 0;
		int end = 0;
		int sum = 0;
		int ans = 0;

		while (true) {
			if (sum >= N) {
				sum -= list.get(start);
				start++;
			} else if (end == list.size()) {
				break;
			} else {
				sum += list.get(end);
				end++;
			}
			if (N == sum)
				ans++;
		}
		System.out.println(ans);
	}
}

 

반응형

'Algorithm > 백준' 카테고리의 다른 글

16973번 : 직사각형 탈출 [Java]  (0) 2021.04.20
1806번 : 부분합 [Java]  (0) 2021.04.20
13305번 : 주유소 [Java]  (0) 2021.04.12
1987번 : 알파벳 [Java]  (0) 2021.04.11
5014번 : 스타트링크 [Java]  (0) 2021.04.11