ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 알고리즘 문제 - 소수뒤집기
    Java 알고리즘 문제/자바(Java) 알고리즘 문제풀이 입문 2023. 8. 9. 17:35
    반응형

    소수 뒤집기

     

    설명

    N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요.

    예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.

    첫 자리부터의 연속된 0은 무시한다.

     

    입력

    첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.

    각 자연수의 크기는 100,000를 넘지 않는다.

     

    출력

    첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.

     

    예시 입력

    9
    32 55 62 20 250 370 200 30 100

    출력 예시

    23 2 73 2 3

     

     

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
     
    	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;
    	}
    	
    	public ArrayList<Integer> test(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;
    				res=res*10+t;
    				tmp = tmp /10;
    			}
    			if(isPrime(res)) {
    				answer.add(res);
    			}
    			
    		}
    		
    		return answer;
    			
    		
    	}
    	
    	public static void main(String[] args){
    		Main t = new Main();
    		Scanner kb = new Scanner(System.in);
    		
    		int n = kb.nextInt();
    		int[] arr = new int[n];
    		for(int i=0; i<n; i++) {
    			arr[i] = kb.nextInt();
    		}
    		
    		for(int x : t.test(n, arr)) {
    			System.out.printf(x + " ");
    		}
        }
    }

     

    이와같이 N 자연수의 갯수와  N개의 자연수가 주어진다. 

    입력 받은 숫자들을 뒤집은 다음 소수만을 출력하는 프로그램이다. 

    문자열을 뒤집기 위해서는 10으로 계속 나눠주는 방법을 선택하였다. 

    	public ArrayList<Integer> test(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;
    				res=res*10+t;
    				tmp = tmp /10;
    			}
    			if(isPrime(res)) {
    				answer.add(res);
    			}
    			
    		}
    		
    		return answer;
    			
    		
    	}

    숫자를 10으로 나눈 나머지는 무조건 1의 자리 숫자이다.

    for문을 통해 tmp에 arr[i]번째의 입력값을 집어 넣은 후에 10으로 지속적으로 나누어 숫자를 뒤집에 res에 저장한다. 

     

    그런 후에 뒤집은 숫자가 소수인지 아닌지 판별하는 메서드를 하나 생성해보자.

    	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;
    	}

    1은 소수가 아니기에 false를 바로 반환한다.

    for문은 2부터 시작하여 뒤집은 숫자전까지 범위를 설정하였다.

    2~num사이의 값들을 순차적으로 돌며 나머지가 0인경우 false를 반환하도록 해준다.

    해당 메서드를 거쳐 소수가 걸러진 후에 소수라면  true를 반환하게 되고 true를 반환한다면 ArrayLIst에 해당 값을 추가한다.

     

    반응형

    댓글

Designed by Tistory.