반응형
🔺 문제
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
🔺 코드
- 방법1
import java.util.*;
import java.io.*;
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 = 0;
List<Integer> list = new ArrayList<>();
for(int i = Math.min(m,n) ; i <= Math.max(m,n) ; i++) {
boolean isPrime = true;
if(i == 1) isPrime = false;
for(int j = 2 ; j <= Math.sqrt(i) ; j++) {
if(i % j == 0) { // 소수가 아닌 경우
isPrime = false;
break;
}
}
// 소수인 경우
if(isPrime) {
sum += i;
list.add(i);
}
}
if(list.size() != 0) {
System.out.println(sum);
System.out.println(list.get(0));
}
else {
System.out.println(-1);
}
}
}
✅ 해결 아이디어
- 리스트를 생성해 여기에 소수를 넣고, 합까지 더한다.
- 최솟값은 리스트의 0번째 원소니까list.get(0)
해서 출력
에라토스테네스의 체 구현할 생각하다가 앗 그럼 최솟값이랑 합 계산은 어떻게 하지? 생각해보다가 일단 이렇게 해보았다...
시간 복잡도가 좋지는 않은...
- 방법2) 에라토스테네스의 체 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.util.*;
import java.io.*;
public class Main {
public static final int MAX = 10001;
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());
List<Integer> list = new ArrayList<>();
int total = 0;
int min = 0;
// 에라토스테네스의 체
boolean[] isPrime = new boolean[MAX];
for(int i = 2 ; i <= N ; i++) {
isPrime[i] = true;
}
for(int i = 2 ; i <= Math.sqrt(MAX) ; i++) {
for(int j = i * i ; j < MAX ; j += i) {
if(!isPrime[j]) continue;
isPrime[j] = false;
}
}
// 소수들의 합 구하기
for(int i = M ; i <= N ; i++) {
if(isPrime[i]) {
total += i;
list.add(i);
}
}
if(list.size() == 0) {
System.out.println("-1");
}
else {
System.out.println(total);
System.out.println(list.get(0));
}
}
}
|
cs |
🔺 다른 풀이들
[백준] 2581번 : 소수 - JAVA [자바]
https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는
st-lab.tistory.com
에라토스테네스의 체를 사용해서 풀어주셨다!👍👍
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 1085번: 직사각형에서 탈출 (0) | 2023.03.29 |
---|---|
[백준/JAVA] 11653번: 소인수분해 (0) | 2023.03.28 |
[백준/JAVA] 9506번: 약수들의 합 (0) | 2023.03.28 |
[백준/JAVA] 1978번: 소수 찾기 (0) | 2023.03.28 |
[백준/JAVA] 2501번: 약수 구하기 (0) | 2023.03.27 |