망나니 AWOS의 일상
article thumbnail

 

문제 조건

1. M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 합

2. 둘째 줄에 1번 조건의 소수 중 최솟값 출력

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

import java.util.Scanner;

// 2581
class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int M = sc.nextInt();
        int N = sc.nextInt();

        int[] arr = new int[N];

        int count, tot=0, sosuCount=0;
        for(int i=M; i<=N; i++){
            count =0;
            int j=1;

            // 소수 하나를 입력받으면 입력받은수 / (1부터 입력받은 수까지) 계산하여
            while(j<=i){
                if(i % j == 0){
                    count++;
                }
                j++;
            }
            // 카운트가 자신과 1일 때의 2개인 경우에만 소수 출력
            if(count == 2) {
                tot+=i;
                arr[sosuCount] = i;
                sosuCount++;
            }
        }
        if(tot == 0 || arr[0] == 0){
            System.out.println(-1);
        }else {
            System.out.println(tot);
            System.out.println(arr[0]);
        }
        sc.close();
    }
}

소수는 자신과 1이외엔 약수가 없는 자연수를 말한다. (약수가 총 2개)

count의 역할 : 약수가 2개일 때만 sosu를 세도록 하였다.

 

j의 역할 : 1부터 ~ for문의 i까지 j로 나눠서 해당 i라는 수가 소수인지 판별하도록 하였다. (남들이 보기엔 비효율적...)

 

sosuCount의 역할 : 배열 arr에 소수를 하나씩 담아서 두 번째 조건인 둘째 줄에 1번 조건의 소수 중 최솟값 출력을 하기 위해 만들었다.

 

tot의 역할 : i가 소수라면 첫 번째 조건인 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 합을 출력을 하기 위해 만들었다.

 

마지막 if 문에서 조건을 보면 세 번째 조건인 M이상 N이하의 자연수 중 소수가 없을 경우 첫째 줄에 -1 출력을 하기 위해서 tot에 0이 들어가 있거나 배열 arr의 첫번째 원소값이 0이라면 -1을 출력하도록 했다.

예제2 입력을 보면 64 65를 입력받았을 때 출력이 -1이다.

 

집어 넣어보면 64와 65는 소수가 아니기 때문에 if(count==2)라는 조건을 충족하지 못해 tot에는 0이라는 값이 들어가있게 되는 것이고, 배열 arr에도 당연히 0이라는 값이 들어가 있기 때문에 -1을 출력하게 되는 것이다.

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!