import java.util.*;
class Solution {
public int solution(String numbers) {
int answer = 0;
HashSet<Integer> hs = new HashSet<>();
boolean[] visited = new boolean[numbers.length()];
makeNumber("", numbers, visited, hs);
Iterator<Integer> iterator = hs.iterator();
while (iterator.hasNext()) {
int num = iterator.next();
if (num % 2 == 0) {
if (num == 2) answer++;
}
else {
if (num == 1) continue;
boolean prime = true;
for (int i = 3; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
prime = false;
break;
}
}
if (prime) answer++;
}
}
return answer;
}
void makeNumber(String num, String numbers, boolean[] visited, HashSet<Integer> hs) {
if (num.length() > 0) hs.add(Integer.parseInt(num));
if (num.length() == numbers.length()) {
return;
}
for (int i = 0; i < numbers.length(); i++) {
if (!visited[i]) {
visited[i] = true;
makeNumber(num + numbers.charAt(i), numbers, visited, hs);
num = num.substring(0, num.length());
visited[i] = false;
}
}
}
}
순열(permutation)에 대해 공부할 수 있는 기회였다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges