본문 바로가기

CS ﹒ Algorithm/Baekjoon

JAVA백준 문제풀이 (9) 2581:소수

 

 

포스팅한 1978: 소수 찾기와 똑같다고 봐도 무방한 문제.

에라토스테네스의 체를 코드로 구현할 수 있는 사람이 결과물을 다른 곳에 담아 출력하는 걸 할 줄 모를리가 없기 때문이다.

혹시라도 에라토스테네스의 체를 모른다면 예전에 작성한 포스팅을 읽어보자.

단순해서 한 번 보면 이해할 수 있다. 

 

 

https://7357.tistory.com/104?category=1065986 

 

0부터 n까지의 수 중 소수 구하기 : 에라토스테네스의 체

고대 그리스 수학자 에라토스테네스가 발견한 소수를 구하는 간편한 방법이다. 알고리즘 중에 그나마 쉬운 편에 속한다. (1) 우선 0과 1은 소수가 아니기때문에 제외한다. (2) 소수인 2를 제외한 2

7357.tistory.com

 

 

 

 

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int firstInput = scanner.nextInt();
        int secondInput = scanner.nextInt();
        boolean[] numRange = new boolean[10001];

        numRange[0] = numRange[1] = true;

        for (int i=0; i*i< numRange.length; i++) {
            if (!numRange[i]) {
                for (int j=i*i; j< numRange.length; j += i) {
                    numRange[j] = true;
                }
            }
        }
        // 여기까지 에라토스테네스의 체를 이용한 소수 구하기 (이전 포스팅 참고)

        ArrayList<Integer> numArr = new ArrayList<>();
        // 몇 개가 들어올지 모르기 때문에 ArrayList를 사용했다.
        int sum = 0;
        // 합
        for (int i=firstInput; i<=secondInput; i++) {
            if (!numRange[i]) {
                numArr.add(i);
                sum += i;
            }
            // numRange[i]가 소수일 경우 i를 ArrayList에 넣고 sum 변수에 더해준다.
        }

        if (numArr.size() == 0) {
        // 문제 조건 1. "인수가 없을 경우 -1을 반환한다"
            System.out.println(-1);
        } else {
            int min = numArr.get(0);
            // 배열의 첫 번째 인덱스에 가장 작은 수가 들어가게 되어있다.
            System.out.println(sum);
            System.out.println(min);
        }
    }
}