(1) numbers의 모든 순열을 구한다.
(2) 소수일 경우에만 ArrayList에 넣는다.
(3) size를 return
import java.util.*;
class Solution {
static ArrayList<Integer> primes = new ArrayList<>();
public int solution(String numbers) {
String[] nums = numbers.split("");
for(int i=1; i<=nums.length; i++){
int n = nums.length;
String[] output = new String[i];
boolean[] visited = new boolean[n];
perm(nums, output, visited, 0, nums.length, i);
}
return primes.size();
}
static void perm(String[] arr, String[] output, boolean[] visited, int depth, int n, int r) {
if (depth == r) {
int num = Integer.parseInt(String.join("", output));
if(!primes.contains(num) && isPrime(num)){
primes.add(num);
}
return;
}
for (int i = 0; i < n; i++) {
if (!visited[i]) {
visited[i] = true;
output[depth] = arr[i];
perm(arr, output, visited, depth + 1, n, r);
visited[i] = false;
}
}
}
static boolean isPrime(int num){
if (num <= 1) return false;
else if (num == 2 || num == 3) return true;
else if (num % 2 == 0 || num % 3 == 0) return false;
for (int i = 5; i <= num / i; i++)
{
if (num % i == 0 || num % (i + 2) == 0)
return false;
}
return true;
}
}
얻어갈 것이 많은 문제였습니다.. 순열 알고리즘, 소수 찾는 알고리즘, string과 string array 사이의 변환 등의 테크닉이 들어감