728x90
문제
https://www.acmicpc.net/problem/1990
접근 방법
- 문제에 나와있는대로 소수이면서 팰린드롬을 찾는 문제이다.
- 그러면 먼저 소수를 찾아서 배열을 만들어 주고, A ~ B까지 순환하면서 그 수가 소수인지, 만약 소수이면 팰린드롬 검사를 해줘서 맞으면 모두 저장한다.
- 그리고 마지막은 -1을 저장한다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static StringBuilder sb;
private static BufferedReader br;
private static StringTokenizer st;
private static int A,B;
private static boolean[] isPrime = new boolean[100000010];
//소수 체크
public static void primeCheck(){
for(int i = 2 ; i * i <= 100000000 ; i++){
if(isPrime[i]){
for(int j = i*i ; j <= 100000000 ; j+=i){
isPrime[j] = false;
}
}
}
}
//입력
public static void input() throws Exception {
br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
Arrays.fill(isPrime,true);
isPrime[0] = false;
isPrime[1] = false;
primeCheck();
st = new StringTokenizer(br.readLine());
A = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
}
//펠린드롬 체크(sb.reverse() 대신 구현)
public static boolean palindromeCheck(int i){
int input = i;
int reverseNum = 0;
while (i != 0){
int lastNum = i%10;
reverseNum = reverseNum*10+lastNum;
i/=10;
}
if(input == reverseNum){
return true;
}else{
return false;
}
}
//실행
public static void process() {
for(int i = A ; i <= B ; i++){
if(isPrime[i] && palindromeCheck(i)){
sb.append(i).append("\n");
}
}
sb.append(-1).append("\n");
}
public static void main(String[] args) throws Exception {
input();
process();
System.out.println(sb.toString());
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 15996번 : 팩토리얼 나누기 (0) | 2024.05.21 |
---|---|
[Java] 백준 9417번 : 최대GCD (0) | 2024.05.21 |
[Java] 백준 23888번 : 등차수열과 쿼리 (0) | 2024.05.17 |
[Java] 백준 1407번 : 2로 몇 번 나누어질까 (0) | 2024.05.17 |
[Java] 백준 2436번 : 공약수 (0) | 2024.05.14 |