우선 check함수를 만들어서, 두 문자열이 같은지 판단하고, 그 다음은 재귀함수를 이용하여, bfs함수를 만들자. check가 true인 원소를 result배열에 담고, 원소가 다 담기면 arr에 담자. 또한 담은 배열들은 순서에 상관있기 때문에, 중복을 제거한 배열들이 답에 해당되므로, 중복된 원소들을 제거해주고 개수를 세어 정답을 Return 해주자.
const check = (str1 ,str2) =>{
if(str1.length === str2.length){
for(var i =0; i<str1.length; i++){
if(str1[i] !== str2[i] && str2[i] !== '*'){
return false;
}
}
return true;
}else{
return false;
}
}
let arr = []
const bfs = (arr1, arr2,idx,resulted) => {
if(arr2.length === 0) {
arr.push(resulted)
return resulted
}
arr1.forEach((d,i,o)=>{
let rest = [...o.slice(0,i), ...o.slice(i+1)]
if(check(d, arr2[0])){
let result = [...resulted]
result.push(d);
bfs(rest, arr2.slice(1), 0, result)
}
})
return 0;
}
function solution(user_id, banned_id) {
var answer = 0;
let obj = {};
bfs(user_id, banned_id,0,[]);
answer = (new Set(arr.map(i => i.sort().join()))).size
return answer;
}
배열의 순서가 같아도 중복이 안잡히기 떄문에, join으로 문자열로 변환 후 순서를 잡아주어야 한다. 또한 Set을 이용하면 중복을 쉽게 제거할 수 있다. 재귀함수는 여러번 공부하였기때문에 쉽게 만들 수 있었다.