알고리즘
백준 24039 2021은 무엇이 특별할까?
킨글
2024. 9. 4. 22:47
설명
- 기본적인 아이디어는 3부터 시작해서 값을 prevNum과 nextNum을 2개 기억하면서 둘이 계속 곱해준다.
만약 곱해준 값이 입력 받은 N보다 크면 정답을 출력해준다. - num이 3부터 시작하도록 초기값 설정
- 소수가 2부터 시작하므로 2로 초기화 해줌.
- next를 prev로 옮겨주고 next에 num을 넣어줌
- num이 prevNum보다 작은 경우 prevNum에 그대로 넣음
- 곱한값이 N 보다 높으면 break;
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
// 24039
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
// 초기값 설정
int num = 3;
// 소수가 2부터 시작하므로 2로 초기화 해줌.
int prevNum = 2;
int nextNum = 2;
while(true) {
if(isPrimeCustom(num)) {
if(num > prevNum) {
// next를 prev로 옮겨주고 next에 num을 넣어줌
prevNum = nextNum;
nextNum = num;
} else {
// num이 prevNum보다 작은 경우 prevNum에 그대로 넣음
prevNum = num;
}
}
// 곱한값이 N 보다 높으면 break;
if(prevNum * nextNum > N) {
break;
}
num++;
}
bw.write(prevNum * nextNum + " ");
bw.flush();
bw.close();
br.close();
}
private static boolean isPrimeCustom(int num) {
boolean isPrime = true;
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
return isPrime;
}
}