728x90
문제 풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()), i, j;
br.close();
boolean b[] = new boolean[n + 1];
for (i = 2; (i * i) <= n; i++)
if (!b[i])
for (j = i * 2; j <= n; j += i)
b[j] = true;
List<Integer> a = new ArrayList<>();
for (i = 2; i <= n; i++)
if (!b[i])
a.add(i);
int left = 0, right = 0, sum = 0, cnt = 0, size = a.size();
while (true) {
if (sum >= n) {
if (sum == n) cnt++;
sum -= a.get(left++);
} else {
if (right == size) break;
sum += a.get(right++);
}
}
System.out.println(cnt);
}
}
* 두 포인터
- '에라토스테네스의 체'를 이용하여 1부터 n까지의 수들 중 소수를 구해 리스트 a에 담는다
- 리스트 a를 탐색하며 부분합을 구해 n이 되는 횟수를 구함
※ 에라토스테네스의 체 : https://hyunjiishailey.tistory.com/497
※ 부분합 : hyunjiishailey.tistory.com/261
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 2143: 두 배열의 합 / 이분 탐색 (0) | 2020.12.07 |
---|---|
[백준(Baekjoon)][자바(java)] 7453 : 합이 0인 네 정수 / 두 포인터 (0) | 2020.12.07 |
[백준(Baekjoon)][자바(java)] 1806 : 부분합 / 두 포인터 (0) | 2020.12.07 |
[백준(Baekjoon)][자바(java)] 2003 : 수들의 합 2 / 두 포인터 (0) | 2020.12.07 |
[백준(Baekjoon)][자바(java)] 4811 : 알약 / 동적 계획법 (0) | 2020.12.07 |