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;
}
'알고리즘 > 인프런_자바코테강의' 카테고리의 다른 글
인프런 8. 등수구하기(Java) (0) | 2022.04.21 |
---|---|
인프런 7. 점수계산 (Java) (0) | 2022.04.21 |
인프런 5.소수(에라토스테네스 체)_Java (0) | 2022.04.20 |
인프런 4. 피보나치 수열(Java) (0) | 2022.04.20 |
인프런 3. 가위 바위 보 (Java) (0) | 2022.04.20 |