https://school.programmers.co.kr/learn/courses/30/lessons/42839#
import java.util.*;
class Solution {
static Set<Integer> set = new HashSet<>();
public int solution(String numbers) {
int answer = 0;
boolean[] visit = new boolean[numbers.length()];
int[] arr = new int[numbers.length()];
for(int i = 1; i <= numbers.length(); ++i)
{
//System.out.println(i);
dfs(numbers, 0, i, visit, arr);
}
return answer = set.size();
}
public void dfs(String numbers, int depth, int max, boolean[] visit, int[] arr)
{
if(depth == max)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < max; ++i)
{
sb.append(arr[i]);
}
int n = Integer.parseInt(sb.toString());
if(isPrime(n))
{
set.add(n);
//System.out.println(n);
}
return;
}
for(int i = 0; i < numbers.length(); ++i)
{
if(visit[i] == false)
{
Character c = numbers.charAt(i);
int cur = Integer.parseInt(c.toString());
arr[depth] = cur;
visit[i] = true;
dfs(numbers, depth+1, max, visit, arr);
visit[i] = false;
}
}
}
public boolean isPrime(int n)
{
if(n == 1 || n == 0)
{
return false;
}
int len = (int)Math.sqrt(n);
for(int i = 2; i <= len; ++i)
{
if(n%i == 0)
return false;
}
return true;
}
}