문제 : boj24039
우선 연속한 두 소수를 알 수 있어야 한다. 이건 에라토스테네스의 체로 미리 특정 수까지의 소수를 구해두면 된다. 결론적으로 103까지의 모든 소수만 구하면 된다(어차피 상관없는게, 답은 무조건 있고 N보다 큰 수만 나오면 멈추면 되므로 대충 많이 구하면 된다.). 이후 연속한 두 소수를 곱해나가다가 N보다 큰 곱이 나오면 출력하면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
private static final int MAX = 103;
private int getAnswer(int n) {
ArrayList<Integer> pn = new ArrayList<>();
pn.add(2);
boolean[] arr = new boolean[MAX+1];
int sqrtMax = (int) Math.sqrt(MAX);
for (int base = 3; base <= sqrtMax; base+=2) {
if (arr[base]) continue;
int tmp = base+base;
while (tmp <= MAX) {
arr[tmp] = true;
tmp += base;
}
}
for (int i = 3; i <= MAX; i+=2) {
if (!arr[i])
pn.add(i);
}
for (int i = 1; i < pn.size(); i++) {
if (pn.get(i) * pn.get(i-1) > n) {
return pn.get(i) * pn.get(i-1);
}
}
return -1;
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print(getAnswer(Integer.parseInt(br.readLine())));
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 18295 자바 - Ants (BOJ 18295 JAVA) (0) | 2022.03.06 |
---|---|
백준 16951 자바 - 블록 놀이 (BOJ 16951 JAVA) (0) | 2022.03.05 |
백준 2312 자바 - 수 복원하기 (BOJ 2312 JAVA) (0) | 2022.03.03 |
백준 3711 자바 - 학번 (BOJ 3711 JAVA) (0) | 2022.03.02 |
백준 23394 자바 - Haja Ordenação (BOJ 23394 JAVA) (0) | 2022.03.01 |
댓글