[문제풀이] 02-06. 뒤집은 소수

𝒄𝒉𝒂𝒏𝒎𝒊𝒏·2023년 10월 27일
0

인프런, 자바(Java) 알고리즘 문제풀이

Array(1, 2차원 배열) - 0206. 뒤집은 소수


🗒️ 문제


🎈 나의 풀이

	private static int[] primes(int n) {
        int[] numbers = new int[n + 1];

        for(int i=0; i<numbers.length; i++) {
            numbers[i] = i;
        }

        for(int i=2; i<numbers.length; i++) {
            if(numbers[i] != 0) {
                for(int j=i*2; j<numbers.length; j+=i) {
                    numbers[j] = 0;
                }
            }
        }

        return numbers;
    }

    private static String solution(int n, String str) {
        int[] primes = primes(100000);
        String answer = "";
        String[] nums = str.split(" ");

        for(String s : nums) {
            int num = Integer.parseInt(new StringBuilder(s).reverse().toString());

            if (primes[num] != 0 && num != 1) {
                if (!answer.equals("")) answer += " " + num;
                else answer += num;
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String str = sc.nextLine();
        System.out.println(solution(n, str));
    }


🖍️ 강의 풀이

    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){
		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.solution(n, arr)){
			System.out.print(x+" ");
		}
	}


💬 짚어가기

해당 문제는 앞서 풀이한 Stirng 문자열 다루기 문제와, Array 배열 다루기 문제를
합쳐 놓은 문제이다.

나의 풀이의 경우 reverse()parseInt()를 통해 정수를 구하였고, 10만 이하
소수를 모두 찾아 배열에 저장하고, 해당 인덱스의 값이 존재하는지를 통해 소수 여부를
판별하도록 했다.

강의에서는 while 반복문을 통해 자릿수를 뒤집도록 구현했다. 그 후 해당 정수를 직접
나누어가며 소수인지 판별한다.

profile
𝑶𝒏𝒆 𝒅𝒂𝒚 𝒐𝒓 𝒅𝒂𝒚 𝒐𝒏𝒆.

0개의 댓글