https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
◎ 문제


◎ 코드
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
47
48
49
50
51
52
53
54
55
56
|
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// n과 m 입력받기
int n = sc.nextInt();
int m = sc.nextInt();
// 소수 리스트 만들기
// 0부터 m까지의 리스트 생성
int [] primeList = new int[m+1];
for (int i = 0; i <= m; i++) {
primeList[i] = i;
}
// 1은 소수가 아님
primeList[1] = 0;
// 에라토스테네스의 체 사용
for (int i = 2; i <= m ; i++) {
int k = 2;
if (primeList[i] != 0) {
try {
while(true) {
primeList[i*k] = 0;
k += 1;
}
} catch (Exception e) {
continue;
}
}
}
// n부터 m까지의 소수 합 출력
int sumPrime = 0;
for (int i = n; i <= m; i++) {
sumPrime += primeList[i];
}
// 만약 범위내에 소수가 없다면 -1 출력
if (sumPrime == 0) {
System.out.println(-1);
}else{
System.out.println(sumPrime);
}
// n부터 m까지의 소수 중 최솟값 출력
for (int i = n; i <= m; i++) {
if (primeList[i] != 0) {
System.out.println(primeList[i]);
break;
}
}
}
}
|
cs |

◎ 풀이 및 기록
앞에 소수 찾기 문제에서 사용한 코드를 응용하여 풀었다. 근데 만약 입력값의 범위가 더 커진다면 시간초과가 날 수도 있을 거 같다. 다른 풀이도 공부해봐야 할 거 같다.
'코테' 카테고리의 다른 글
[백준 / Java] 25206번 : 너의 평점은 (1) | 2023.02.23 |
---|---|
[백준 / Java] 11653번 : 소인수분해 (0) | 2023.02.20 |
[백준 / Java] 1978번 : 소수 찾기 (0) | 2023.02.19 |
[백준 / Java] 2839번 : 설탕 배달 (0) | 2023.02.18 |
[백준 / Java] 2775번 : 부녀회장이 될테야 (0) | 2023.02.17 |