ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1644 소수의 연속합
    ALGORITHM/BOJ 2021. 1. 20. 00:24

    www.acmicpc.net/problem/1644

     

    1644번: 소수의 연속합

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

    www.acmicpc.net

    2021-01-20


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import 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

    댓글

Programming Diary