0. 소수 구하기 + 연속합 문제
1. 소수 구하기 : 에라토스테네스의 체로 구하면서, 투포인터 사용시 편리하도록 ArrayList에 저장하였다
2. 누적합 구하기
- N보다 같거나 커질때까지 더하며 진행
- N보다 같거나 작아질때까지 빼며 진행
- 원소가 하나만 남을 경우 2번 카운트되는 문제가 있어 prevFst를 두어 방지하였다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = pint(br.readLine());
boolean[]noPrime=new boolean[N+1];
noPrime[0]=noPrime[1]=true;
ArrayList<Integer>prime = new ArrayList<>();
for (int i = 2; i < N+1; i++) {
if(!noPrime[i]) {
prime.add(i);
for (int j = i; j < N+1; j+=i) {
noPrime[j]=true;
}
}
}
int count=0;
//두포인터
int fst=0,end=0;
long sum=0;
while(fst<prime.size() && end<prime.size()) {
while(sum<N && end<prime.size()) {
sum+=prime.get(end++);
}
if(sum==N) {
count++;
if(end<prime.size())sum+=prime.get(end++);
}
int prevFst=fst;
while(sum>N && fst<prime.size()) {
sum-=prime.get(fst++);
}
if(prevFst!=fst && sum==N) {
count++;
if(fst<prime.size())sum-=prime.get(fst++);
}
}
System.out.println(count);
}
static int pint(String s) {
return Integer.parseInt(s);
}
}
'알고리즘 문제 풀이 > BOJ 골드' 카테고리의 다른 글
[백준] 1976 - 여행 가자 (0) | 2021.04.28 |
---|---|
[백준] 1717 - 집합의 표현 (0) | 2021.04.28 |
[백준] 9252 - LCS 2 (0) | 2021.04.28 |
[백준] 1937 - 욕심쟁이 판다 (0) | 2021.04.22 |
[백준] 1865 - 웜홀 (0) | 2021.04.22 |
[백준] 1261 - 알고스팟 (0) | 2021.04.21 |
[백준] 2458 - 키 순서 (0) | 2021.04.21 |