김태원 님의 '자바(Java) 알고리즘 문제풀이 입문: 코딩테스트' 강의를 보고 정리한 글입니다.
설명
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

int answer = 0;
while(n != 0){
answer = answer * 10 + n % 10;
n /= 10;
}

import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public boolean isPrime(int num){
if(num == 1) return false;
for(int j=2; j<num; j++){ //1과 자기자신 빼고 나눠지는게 있으면 소수 아님
if(num % j == 0) return false;
}
return true;
}
public ArrayList<Integer> solution(int n, int[] a){
ArrayList<Integer> result = new ArrayList<>();
int tmp = 0;
for(int i=0; i<n; i++){
tmp = 0;
while(a[i] != 0){
tmp = tmp * 10 + a[i] % 10;
a[i] /= 10;
}
if(isPrime(tmp)) result.add(tmp);
}
return result;
}
public static void main(String[] args) {
Main t = new Main();
Scanner in = new Scanner(System.in);
int k = in.nextInt();
int[] arr = new int[k];
for(int i=0; i<k; i++){
int tmp = in.nextInt();
arr[i] = tmp;
}
for(int s : t.solution(k, arr)){
System.out.print(s + " ");
}
}
}
ArrayList를 떠올려서 하지 못하고 일일히 배열에 추가하려는 방법으로 접근했기에 배열의 방번호를 지정하는 일이 힘들었었다. 문득 동적으로 배열을 다루는 방법을 사용하면 되겠구나 라고 생각이 들어 ArrayList를 뒤늦게 사용하게 되었다.
그리고 숫자를 뒤집는 알고리즘이 낯설었기에 하나하나 대입해가면서 이해해가는 과정에 시간이 많이 걸렸다. 그래고 숫자를 뒤집는 알고리즘을 알아내니 나머지는 수월하게 풀렸다.