import java.util.*;
class Solution {
Set<Integer> candidates = new HashSet<>();
public int solution(String numbers) {
//✅ 재귀를 이용해 숫자 조합을 생성한다.
permutation(numbers, 0, new boolean[numbers.length()], 0);
//✅ 각 숫자 조합을 확인하여 소수의 개수를 센다.
int answer = 0;
for (int num : candidates) {
if (isPrime(num)) answer++;
}
return answer;
}
void permutation(String numbers, int current, boolean[] visited, int digit) {
if (digit == numbers.length()) return;
for (int i = 0; i < numbers.length(); i++) {
if (visited[i]) continue;
int newValue = current + (int)((numbers.charAt(i) - '0') * Math.pow(10, digit));
candidates.add(newValue);
visited[i] = true;
permutation(numbers, newValue, visited, digit + 1);
visited[i] = false;
}
}
boolean isPrime(int n) {
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
}
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.