<2.6> 뒤집은 소수

mutexlocking·2022년 7월 17일
0

문제
: N개의 자연수가 입력되면, N개의 자연수를 뒤집은 후, 뒤집은 수 중에서 소수인 수들만 출력하라
예를들어 32를 뒤집으면 23이고 -> 23은 소수이니 출력해야 한다
또한 910을 뒤집으면 019가 아니라 19로 숫자화를 해야 하고 -> 이는 소수이니 출력해야 한다 -> 즉 기존의 자연수를 뒤집없을 때 연속된 앞의 영은 무시해야 한다.

이 문제의 요구사항과 그에 따른 해결책은 직관적으로 생각할 수 있었다.

[요구사항과 그에 따른 해결책]
1.각 숫자를 뒤집었을 때 , 연속된 앞의 영은 무시할 수 있도록 숫자화를 할 수 있어야 한다.
-> 이는 앞 문제의 해결에서 사용한 StringBuilder 클래스의 reverse() 메서드를 사용하여 문자열로 입력받은 숫자를 뒤집고
-> 이후 Integer.parseInt()를 통해 뒤집힌 숫자 문자열을 , 정상적인 숫자로 변환할 수 있다. -> 이렇게 하면 자동으로 앞의 연속된 0은 무시가 된다.

2.또한 뒤집힌 수를 소수인지 아닌지 판별할 수 있어야 한다.
-> 이는 각 숫자 별로 1과 자신 이외의 수로 나누어 떨어지면 소수가 아니고 , 그렇지 않으면 소수이다 로 판정한다.
-> 단 이번 문제는 1도 판별해야 하므로 , 1인경우는 그냥 소수가 아니라고 판별할 수 있어야 한다.

이에 따른 코드는 아래에서 확인할 수 있다.

import java.util.Scanner;

public class Main {

    public static String solution(String[] strArr){

        String result = "";

        for(int i=0; i<strArr.length; i++){
            int num = Integer.parseInt(new StringBuilder(strArr[i]).reverse().toString());
            if(isPrime(num))
                result += (num + " ");
        }

        return result;
    }

    public static boolean isPrime(int n){

        if(n==1) return false;

        for(int i=2; i<n; i++){
            if(n%i==0) return false;
        }
        return true;
    }

    public static void main(String[] args){

        //0.Scanner 준비
        Scanner sc = new Scanner(System.in);

        //1. 사용자로부터 N을 입력받은 후, N개의 자연수를 모두 String으로 입력받아
        int N = sc.nextInt();

        String[] strArr = new String[N];
        for(int i=0; i<N; i++){
            strArr[i] = sc.next();
        }

        //2. N개의 자연수 String을 인자로 넘기면서 solution()을 호출하여 , 결과를 반환
        String result = solution(strArr);

        //3. 결과를 출력
        System.out.println(result);
    }
}
profile
개발자가 되고자 try 하는중

0개의 댓글