알고리즘/인프런_자바코테강의
인프런 6. 뒤집은 소수 (Java)
고구마와 감자
2022. 4. 20. 20:24
Solution 1 (내 풀이)
단순히 문자 뒤집고 정수 변환 후에 소수 판단 메서드로 확인하였다.
소수판단메서드에서는 정수의 제곱근까지만 나뉘어지는지를 시도하여 횟수를 줄일 수 있다.
private void solution(int n, String[] s) {
StringBuilder sb = new StringBuilder();
for (String x : s) {
StringBuilder temp = new StringBuilder(x);
String reversed = temp.reverse().toString();
int reversedInt = Integer.parseInt(reversed);
if (isPrimeNumber(reversedInt)) sb.append(reversedInt).append(" ");
}
System.out.println(sb);
}
public boolean isPrimeNumber(int x) {
if (x == 1) return false;
for (int i = 2; i <= (int) Math.sqrt(x); i++) {
if (x % i == 0) return false;
}
return true;
}
Solution 2 (강사님 풀이)
int를 1의 자리부터 구해서 다른 변수에 계속 10을 곱한 후 1의 자리를 넣어주는 방식으로 거꾸로 된 수를 구하고
소수 판단을 한다.
private 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; // 1의 자리 숫자 구하고
res = res*10 + t; // 1의 자리 숫자를 새로운 숫자에 넣어준다.
tmp = tmp/10; // 1의 자리를 제한 새로운 tmp로 위 과정을 반복한다.
}
if (isPrime(res)) answer.add(res);
}
return answer;
}
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;
}