문제 조건
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을 출력하게 되는 것이다.
'알고리즘 > 백준' 카테고리의 다른 글
[java] 백준 2440번, 2441번 별 찍기 - 3~4 (0) | 2021.07.26 |
---|---|
[java] 백준 2420번 사파리월드 (4) | 2021.07.25 |
[java] 백준 11653번 소인수분해 (9) | 2021.07.24 |
[java] 백준 4153번 직각삼각형 (2) | 2021.07.23 |
[java] 백준 1978번 소수 찾기 (2) | 2021.07.22 |
펄의 일상이 궁금한 사람 요기~
즐거운 하루 되셨으면 좋겠습니다😊