백준

☕️ [JAVA] 백준 2581_소수

King of Silicon Valley 2021. 10. 5. 20:21
728x90

https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

문제설명은 링크를 참조하세요.

 

이제 자바에 익숙해질겸 평소 풀고있던 백준 문제를 자바로 풀어 보았다. 

소수를 판별하는 함수는 이전에 파이썬으로 만들어 둔 걸 참고하고 자바 코드로 바꿨다. 

가변배열 ArrayList를 사용해서 쉽게 풀 수 있었다. 

 

내 풀이 코드 

import java.util.Scanner;
import java.util.ArrayList;
public class Sosu {
    public boolean sosu(int n){
        if (n < 2) {
            return false;
        }
        int to = (int) Math.sqrt(n) + 1;
        for (int i=2; i < to; i++) {
            if ((n % i) == 0) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        Sosu is_sosu = new Sosu();
        Scanner sc = new Scanner(System.in);
        int min = sc.nextInt();
        int max = sc.nextInt();
        int count = 0;
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        for (int i = min; i < max +1; i++){
            if (is_sosu.sosu(i)){
                count += i;
                list1.add(i);
            }
        }
        if (count == 0){
            System.out.println(-1);
        }
        else {
            System.out.println(count);
            System.out.println(list1.get(0));
        }
    }
}

소수를 판별하는 함수를 만들어주고 

입력 받은값(min~max)를 반복문을 돌려서 소수이면 count에 누적해서 더해주고 배열에 담아준다. 

문제의 조건에서 범위내에 소수가 없으면 -1을 반환해야 하므로 count값을 가지고 조건문을 걸어주었다. 

'백준' 카테고리의 다른 글

[JAVA] 9093 단어 뒤집기 (문자열 다루기)  (0) 2021.11.09
백준 2941 크로아티아 문자  (0) 2021.09.05