Problem Solving/Programmers

[Level 2] 소수 찾기

kmkunk 2022. 3. 31. 16:36
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;
    }
}