문제

정답 코드
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;
}
}
정답 코드(2)
import java.util.HashSet;
class Solution {
public int solution(String numbers) {
HashSet<Integer> set = new HashSet<>();
permutation("", numbers, set);
int count = 0;
while(set.iterator().hasNext()){
int a = set.iterator().next();
set.remove(a);
if(a==2) count++;
if(a%2!=0 && isPrime(a)){
count++;
}
}
return count;
}
public boolean isPrime(int n){
if(n==0 || n==1) return false;
for(int i=3; i<=(int)Math.sqrt(n); i+=2){
if(n%i==0) return false;
}
return true;
}
public void permutation(String prefix, String str, HashSet<Integer> set) {
int n = str.length();
if(!prefix.equals("")) set.add(Integer.valueOf(prefix));
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n), set);
}
}