[백준] 2581 소수 JAVA

·2024년 3월 4일

1일1백준 -Java-

목록 보기
19/60

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

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

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

예제 입력1

60
100

예제 출력1

620
61

예제 입력2

64
65

예제 출력2

-1

내가 했던 풀이 방법

  1. M부터 N까지 i를 1씩 증가시키는 for문을 만듦
  2. 1번 for문 안에 1부터 i까지 증가시키는 for문을 만듦
  3. 2번 for문 안에 소수를 구분하는 코드를 넣음 (1, 2는 예외로 따로 처리)
  4. 만약 소수일 경우, sum과 합쳐주고 최소값일 경우 min에 값을 저장해준다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    
    public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int M = Integer.parseInt(br.readLine());
        int N = Integer.parseInt(br.readLine());
        
        int sum = 0;
        int min = 10000;
        boolean prime;
        for(int i=M; i<=N; i++) {
            prime = true;
            if(i==1) {
                prime = false;
            }
            else if(i==2) {
                sum = sum + i;
                min = i;
            }
            else {
                for(int j=2; j<i; j++) {
                    if(i%j==0) {
                        prime = false;
                        break;
                    }
                }
                if(prime) {
                    sum = sum + i;
                    if(min>i) {
                        min = i;
                    }
                }
            }
        }

        if(sum==0) {
            System.out.print(-1);
        } else {
            System.out.println(sum);
            System.out.print(min);
        }
    }
}

회고

소수 문제를 저번에 풀었기 때문에 응용문제로 가져와봤다. 대부분이 지난번 문제와 유사하게 풀었기 때문에 자세한 건 소수 찾기를 참고하도록 하자.

profile
Frontend🍓

0개의 댓글