import java.util.*;

class Solution {
    public boolean[] visited;    
    public String[] arr;
    public int answer = 0;
    public Set<Integer> set = new HashSet<>();
    
    public int solution(String numbers) {
        arr = numbers.split("");
        visited = new boolean[arr.length];
        
        for(int i=1; i<=arr.length; i++) { recur(0, i, ""); }
        
        return answer;
    }
    
    public void recur(int index, int len, String s) {
        if(index==len) {
            int n = Integer.parseInt(s);
            if(isPrime(n) && !set.contains(n)) {
                set.add(n);
                answer++;
            }
            
            return;
        }
        
        for(int i=0; i<arr.length; i++) {
            if(visited[i]) { continue; }
            
            visited[i] = true;
            recur(index+1, len, s+arr[i]);
            visited[i] = false;
        }
    }
    
    public boolean isPrime(int n) {
        if(n==0 || n==1) { return false; }
        
        for(int i=2; i*i<=n; i++) {
            if(n%i==0) { return false; }
        }
        
        return true;
    }
}

'Problem Solving > Programmers' 카테고리의 다른 글

[Level 2] 예상 대진표  (0) 2022.04.06
[Level 2] 조이스틱  (0) 2022.03.31
[Level 2] 가장 큰 수  (0) 2022.03.31
[Level 2] 프린터  (0) 2022.03.31
[Level 2] 전화번호 목록  (0) 2022.03.31