순간을 기록으로

[Java] 뒤집은 소수 | 인프런 본문

Problem Solving

[Java] 뒤집은 소수 | 인프런

luminous13 2022. 4. 20. 13:24

문제

 

풀이

알고리즘을 간소화하면 다음과 같다.

/*
* N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요.
* - n개의 자연수를 순차적으로 접근합니다.
* - 자연수를 의 값을 뒤집습니다.
* - 뒤집은 자연수가 소수인지 판별합니다.
* - 소수이면 리스트에 담습니다.
* */

 

자연수 값을 뒤집기와 소수를 판별하는 task의 경우 함수로 따로 만들어 가독성을 올렸습니다.

 

import java.util.ArrayList;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] arr = new int[n];
        for (int i=0; i<n; i++) {
            arr[i] = in.nextInt();
        }
        for (Integer x : solution(n, arr)) {
            System.out.print(x + " ");
        }
    }

    public static ArrayList<Integer> solution(int n, int[] arr) {
        ArrayList<Integer> primeList = new ArrayList<>();

        for (int x : arr) {
            // 숫자 뒤집기(1.나머지연산, 2.문자열화, ..)
            int num = reverseNum(x);
            // 소수인지 판별하기
            if (isPrime(num))
                primeList.add(num);
        }
        return primeList;
    }

    public static int reverseNum(int x) {
        StringBuilder sb = new StringBuilder(String.valueOf(x)).reverse();
        return Integer.parseInt(sb.toString());
    }
    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i=2; i<=Math.sqrt(num); i++) {
            if (num%i == 0) return false;
        }
        return true;
    }
}
Comments