반응형
```
백준 2581번 소수 JAVA 구현해보기
```
이번 글을 통해 배워갈 내용
- 백준 2581번 풀이
https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
백준 2581번 소수는
난이도 실버 등급의 문제로서
10,000 이하의 두 수가 주어질 때
그 두수 포함 사이에 있는
가장 작은 소수와
소수의 합을 출력하고
없다면 -1을 출력하는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
소수를 판별하는 배열을 만들고
그 배열을 활용해서
답을 찾습니다.
private static boolean[] findPrimeNumbers(int sqrtPrimeLimitNum) {
int PrimeLimitNum = sqrtPrimeLimitNum * sqrtPrimeLimitNum;
final boolean[] isPrime = new boolean[PrimeLimitNum];
Arrays.fill(isPrime, Boolean.TRUE);
isPrime[0] = false;
isPrime[1] = false;
for (int i = 2; i <= sqrtPrimeLimitNum; i++) {
if (!isPrime[i]) continue;
for (int j = i; j < PrimeLimitNum; j += i) {
if (isPrime[j] && i != j) isPrime[j] = false;
}
}
return isPrime;
}
전체 코드는 아래와 같습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
final static int SQRT_PRIME_LIMIT = 10000;
public static void main(String[] args) throws IOException {
final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
final boolean[] isPrime = findPrimeNumbers(SQRT_PRIME_LIMIT);
int M = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
List<Integer> primes = new ArrayList<>();
for (int i = M; i <= N; i++) {
if (isPrime[i]) {
primes.add(i);
}
}
if (primes.isEmpty()) {
System.out.print(-1);
} else {
System.out.println(primes.stream().mapToInt(Integer::valueOf).sum());
System.out.print(primes.get(0));
}
br.close();
}
private static boolean[] findPrimeNumbers(int sqrtPrimeLimitNum) {
int PrimeLimitNum = sqrtPrimeLimitNum * sqrtPrimeLimitNum;
final boolean[] isPrime = new boolean[PrimeLimitNum];
Arrays.fill(isPrime, Boolean.TRUE);
isPrime[0] = false;
isPrime[1] = false;
for (int i = 2; i <= sqrtPrimeLimitNum; i++) {
if (!isPrime[i]) continue;
for (int j = i; j < PrimeLimitNum; j += i) {
if (isPrime[j] && i != j) isPrime[j] = false;
}
}
return isPrime;
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
반응형
'Java > Java 알고리즘' 카테고리의 다른 글
백준 9184번 신나는 함수 실행 수열JAVA 구현해보기 (0) | 2022.02.04 |
---|---|
백준 9461번 파도반 수열JAVA 구현해보기 (0) | 2022.02.04 |
백준 1297번 TV 크기 JAVA 구현해보기 (0) | 2022.02.04 |
백준 17256번 달달함이 넘쳐흘러 JAVA 구현해보기 (0) | 2022.02.04 |
백준 10539번 수빈이와 수열 JAVA 구현해보기 (0) | 2022.02.04 |