💡Problem Solving/Programmers

[프로그래머스] 소수 찾기 (Java)

gom20 2021. 10. 23. 11:22

#문제

https://programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

 

#소스코드

import java.util.*;
class Solution {
    
    public ArrayList<Integer> primes = new ArrayList<Integer>();
    public int[] numbers;
    public boolean[] used;
    public int num, count;
    
    public boolean isPrime(int k){      
        if(k < 2) return false;
        for(int i = 2; i <= Math.sqrt(k); i++){
            if(k%i == 0){
                return false;
            }
        }
        
        if(!primes.contains(k)){
            primes.add(k);
        }
        return true;
    }
    
    public void recurFunction(int num, int[] numbers, boolean[] used){
        if(String.valueOf(num).length() == numbers.length){
            return;
        }
        for(int i = 0; i < numbers.length; i++){
            if(used[i]) continue;
            int newNum = Integer.parseInt(num + "" +numbers[i]);
            if(isPrime(newNum)) count++;            
           
            used[i] = true;
            recurFunction(newNum, numbers, used);
            used[i] = false;
        }
    }
    
    public int solution(String input) {
        char[] arr = input.toCharArray();
        used = new boolean[arr.length];
        numbers = new int[arr.length];
        for(int i= 0; i < numbers.length; i++){
            numbers[i] = Integer.parseInt(String.valueOf(arr[i]));
        }
        
        for(int i = 0; i < numbers.length; i++){
            if(numbers[i] == 0) continue;
            used[i] = true;
            if(isPrime(numbers[i])) count++;    
            recurFunction(numbers[i], numbers, used);
            used[i] = false;
        }

        return primes.size();
    }
}