-
[백준] 1644 소수의 연속합ALGORITHM/BOJ 2021. 1. 20. 00:24
2021-01-20
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import java.util.ArrayList;import java.util.Scanner;public class Main1644 {public static int N, arr[];public static ArrayList<Integer> list;public static void solve() {arr[0] = 1;arr[1] = 1;for(int i = 2; i <= N; i++) {for(int k = 2; (i * k) <= N; k++) {if(arr[i*k] == 0) {arr[i*k] = 1;}}}for(int i = 0; i <= N; i++) {if(arr[i] == 0) {list.add(i);}}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);N = sc.nextInt();arr = new int[N+1];list = new ArrayList<>();solve();int start = 0;int end = 0;int count = 0;int sum = 0;while(start < list.size()) {if(sum >= N) {sum -= list.get(start++);} else if(end == list.size()) break;else {sum += list.get(end++);}if(sum == N) {count++;}}System.out.println(count);}}cs #문제풀이
소수찾기 + 투 포인터 알고리즘 문제이다.
1. 에라토스테네스의 체로 소수를 찾고, arr배열에 소수가 아닌 경우를 1로 표시하였다.
2. arraylist에 arr배열에서 소수(값이 0인 경우)를 찾아서 넣었다.
3. 투 포인터 알고리즘으로 연속된 합 중 N과 같은 경우를 찾는다.
'ALGORITHM > BOJ' 카테고리의 다른 글
[백준] 1766 문제집 (0) 2021.01.27 [백준] 1194 달이 차오른다, 가자. (0) 2021.01.23 [백준] 2096 내려가기 (0) 2021.01.19 [백준] 2805 나무자르기 (0) 2021.01.14 [백준] 2252 줄 세우기 (0) 2021.01.12