import java.util.*;
class Main {
public ArrayList<Integer> solution(int n,int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
for(int i=0; i<arr.length; i++) {
//숫자뒤집기
String rv = new StringBuilder(Integer.toString(arr[i])).reverse().toString();
int a = Integer.parseInt(rv);
//뒤집힌 숫자의 제곱근
int rt = (int) Math.sqrt(a);
boolean prime = true;
//소수판별
for(int j=2; j<=rt;j++) {
if(a%j == 0) prime = false;
}
if(prime && a>1) answer.add(a);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i=0; i<n;i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x+ " ");
}
}
}
다른 isPrime을 따로 만든 풀이법
import java.util.*;
class Main {
public boolean isPrime(int num) {
if(num==1) return false;
for(int i=2; i<num;i++) {
if(num%i == 0) return false;
}
return true;
}
public ArrayList<Integer> solution(int n,int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
for(int i=0; i<n;i++) {
int tmp = arr[i];
int res = 0;
while (tmp>0) {
int t = tmp%10; //끝자리 321
res = res*10 + t;
tmp = tmp/10;
}
if(isPrime(res)) {
answer.add(res);
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[] arr = new int[n];
for(int i=0; i<n;i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, arr)) {
System.out.print(x+ " ");
}
}
}
2.isPrime을 따로 두고 숫자를 뒤집는것도 stringBuilder를 쓰지않고 일일히 뒤집었다.
tmp가 현재 숫자이고 t가 tmp를 10으로 나눈것의 나머지일때,
t는 무조건 tmp의 끝자리 숫자이므로 그것을 res에
res = res*10 + t로 저장하게되면, 끝자리부터 담긴다.
그리고 tmp를 맨 뒷자리를 제외한 즉,t를 제외한 값인,
tmp/10 (몫)으로 바꿔주면 된다!
첫번째 풀이에서 판별을 할때, for문을 rt까지 포함시켜서 돌리는것이 중요!
만약 9를 판별한다하면 root = 3으로 3의 배수가 맞는지도 판단해야하는데 2까지만 판단하단 때문에 꼭 포함시켜야한다.