function solution(numbers) {
let answer = 0;
let arr = numbers.split('')
let set = new Set();
numOfCase(arr,'')
function numOfCase(arr,str) {
if(arr.length) {
for(let i = 0; i < arr.length; i++) {
let copyArr = [...arr];
copyArr.splice(i,1);
numOfCase(copyArr ,str + arr[i])
}
}
if(str > 0) set.add(+str);
}
outer: for(let e of set) {
if(e == 1) continue
for(let i = 2; i <= Math.sqrt(e); i++) {
if(!(e % i)) continue outer;
}
answer++;
}
return answer;
}
모든 가능한 경우의 수를 찾는 재귀함수가 이해가 안돼서 괴로웠던 문제..
이해를 하고 나니 이 재귀를 만들어낸 사람이 엄청 대단하게 느껴졌다.
경우의 수를 다 찾고 겹치는 수를 없애기 위해 set에 저장하고,
다시 배열로 만들어 각 요소에 대해 소수를 체크해주면 해결된다.