알고리즘/인프런_자바코테강의

인프런 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;
    }