티스토리 뷰

알고리즘

백준 알고리즘 2581번 자바

real_water 2020. 3. 29. 02:11

소수를 구하는 문제이다.

문제에서 주어진 범위가 10000이하이므로 100이하의 소수들을 먼저 배열에 집어넣고 시작했다.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
import java.util.List;
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
 
public class bj_2581 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        
        int sum = 0;
        
        int [] sosu = new int []{235711131719232931
                3741434753596167717379838997};
        
        List<Integer> answer = new ArrayList<Integer>();
        List<Integer> out = new ArrayList<Integer>();
        
        for(int i = 0; i<sosu.length; i++)
            answer.add(sosu[i]);
        
        boolean flag;        
        for(int i = 99; i<10000; i+=2) {
            flag = true;//10이상 짝수 배제
            for(int j = 0; j<sosu.length; j++) {
                if (i%sosu[j]== 0 ) {
                    flag = false;            
                }    
            }
            if(flag == true)
                    answer.add(i);
    }
        answer.add(0); //소수는 총 1229개인데 배열 인덱스 벗어나서 add함.
///////////////////////////////////////////////// m이상인 소수의 인덱스 찾기
        int start = 0;
        
        while(start<1229) {
            if(answer.get(start)<=m)
                start++;
            else
                break;
        }
        start--;
        
////////////////////////////////////////////////        
        if((m==0)&&(n>1))
            start = 0;
        else
            sum = 0;
        
        if(m==1&&!= 1)
            start = 0;
        
///////////////////////////////////////////////    out배열에 범위내의 소수들 저장    
        while(start >=0 && start<1229) {
            if(answer.get(start)>=m) {
                out.add(answer.get(start));
            }
            start++;
 
            if(answer.get(start)>n)
                break;
        }
///////////////////////////////////////////////////                
        
        for(int i = 0; i<out.size(); i++)
            sum += out.get(i);
        
        if(sum == 0) {
                System.out.println("-1");
        }
        else {    
            System.out.println(sum);
            System.out.println(out.get(0));
        }
        //System.out.println(start + " "+ last);
        //System.out.println(answer.get(start) + " "+ answer.get(last));
        //System.out.println(answer);
        //System.out.println(out);
    }
 
}
 
cs

 

 

첫번째 문제는 while문을 돌리는데 start 변수때문에 배열의 크기를 넘어서도 탐색하는 거였고,

두번째 문제는 48번째 라인때문에 start가 0이되는 경우가 생기는 거였다.

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함