[알고리즘] 배열(6) : 뒤집은 소수(JAVA)

ho's·2022년 5월 20일
0

문제

풀이

  • 입력받은 자연수를 뒤집고, 그 수가 소수이면 그 소수를 출력하는 프로그램이다.
  • ex) 32 -> 23 은 소수이다.그러면 23을 출력한다.
  • 자연수의 크기는 100,000을 넘지 않는다.

입력1 : 뒤집은 수가 소수인지 아닌지 판별할 개수를 입력한다.
입력2 : 각 숫자를 입력한다.

일단, 값을 입력받고 문자열을 뒤집는것 까지는 해결이 되었지만, 이를 정수형으로 바꾸고 소수인지 판별하는 것에 대해서는 어려움을 느꼈다.

코드를 분석해보자!

for(int i=0;i<n;i++){
	arr[i] = kb.nextInt();
}
for(int x : T.solution(n,arr)){
	System.out.println(x + " ");
}
  • for문을 이용해 입력값을 arr[i]에 넣어준다.
for(int x : T.solution(n,arr)){
	System.out.println(x + " ");
}
  • T.soltuion(n,arr)의 반환타입은 int형 배열이므로 향상된 for문을 이용해 내용을 출력할 수 있다.

public ArrayList<Integer> solution(int n, int[] arr)

  • 반환 타입 ArrayList(integer)이고 메소드 이름은 solution이다. 매개변수는 main에서 입력받은 (int n , int[] arr)을 입력받는다.

    입력받은 숫자를 뒤집는 방법

    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; 
      }
    }
    예를 들어, 123을 입력하면 다음과 같은 순서로 처리가 된다. t = 123%10 = 3
    res = 0*10+3 = 3
    tmp = 123/10 = 12

t = tmp%10 = 12 % 10 = 2
res = 3*10 + 2 = 32;
tmp = 12/10 = 1;

t = 1%10 = 1;
res = 32*10 + 1 = 321;
tmp = 1/10 = 0;

if(isPrime(res)){
	answer.add(res);
}
return answer;

만약 res가 소수이면, ArrayList에 res를 저장한다.
그리고 answer를 반환한다.

소스코드

package algolecture;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Main18 {
    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> 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;
                res = res*10+t;
                tmp = tmp/10;
            }
            if(isPrime(res)) answer.add(res);
        }
        return answer;
    }
    
    public static void main(String[] args) throws IOException {
            Main18 T = new Main18();
            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.solution(n,arr)){
                System.out.print(x + " ");
            }
    }
}
profile
그래야만 한다

0개의 댓글