반응형
혼자 힘으로 풀었는가? O
알고리즘 분류
- 소수
- 에라토스테네스의 체
https://www.acmicpc.net/problem/24039
문제
백준 온라인 저지의 송년대회 Good Bye BOJ, 2021!의 개최일은 2021년 12월 31일이다. 원이는 대회가 개최된다는 사실이 기뻐 제목을 뚫어져라 보다가 2021이 무언가 특별하다는 사실을 깨달았다.
그렇다. 2021은 연속한 두 소수 43과 47의 곱이다. 다음에 이런년도가 오려면 무려 470년 뒤인 2491년이 되어야 한다. 원이는 어떤 수가 연속한 두 소수의 곱으로 이루어져 있으면 특별한 수라 부르기로 하였다.
주어진 수보다 큰 특별한 수 중 가장 작은 수를 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 주어진 수 이 주어진다.
출력
첫 번째 줄에 보다 큰 특별한 수 중 가장 작은 수를 출력하여라.
에라토스테네스의 체를 이용해 소수 목록을 구한 다음 인접한 두 곱셈중 주어진 수보다 크며 가장 작은 소수의 곱을 구하는 문제이다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int [] isPrime = new int[n+1];
int sqrt = (int) Math.sqrt((double)n+1);
isPrime[0] = 2;
isPrime[1] = 2;
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=2; i<sqrt+1; i++) {
if(isPrime[i] == 0) {
for(int j = i+i; j<n+1; j += i) {
isPrime[j] = 2;
}
}
}
for(int i=2; i<n+1; i++) {
if(isPrime[i] == 0) {
list.add(i);
}
}
int result = Integer.MAX_VALUE;
for(int i=0; i<list.size()-1; i++) {
int tmp = list.get(i) * list.get(i+1);
if(tmp > n && result > tmp) {
result = tmp;
break;
}
}
if(result == Integer.MAX_VALUE) {
System.out.println(6);
} else {
System.out.println(result);
}
}
}
N = 1 인경우나 N = 2인 경우
소수의 목록으로 곱셈을 할 수 없기 때문에, 가장 작은 소수의 곱인 2 x 3 = 6의 결과를 리턴한다.
반응형
'Algorithm > 백준' 카테고리의 다른 글
[Java] 백준 2563번 - 색종이 (실버5) (0) | 2025.02.27 |
---|---|
[Java] 백준 29198번 - 이번에는 C번이 문자열 (실버3) (0) | 2025.02.26 |
[Java/Python] 백준 15489번 - 파스칼 삼각형 (실버 4) (0) | 2024.09.30 |
[Python] 백준 1043번 - 거짓말 (골드 4) (0) | 2024.07.04 |
[Python] 백준 1744번 - 수 묶기 (골드 4) (0) | 2024.06.19 |
댓글