정규표현식을 사용하여 제재아이디에 해당하는 id를 찾아 조합을 구해서 HashSet에 담아 중복처리를 하였다.
import java.util.*;
import java.util.regex.Pattern;
class Solution {
public int solution(String[] user_id, String[] banned_id) {
answer = 0;
arr=new ArrayList<>();
v=new int[user_id.length];
sets=new HashSet<>();
recur(0,user_id,banned_id);
return answer;
}
static ArrayList<String> arr;
static int[] v;
static int answer;
static HashSet<Set<String>> sets;
static void recur(int idx,String[] user_id,String[] banned_id){
if(arr.size()== banned_id.length){
HashSet<String> tmp=new HashSet();
for(String s:arr)tmp.add(s);
if(sets.contains(tmp))return;
answer++;
sets.add(tmp);
return;
}
if(idx>= banned_id.length)return;
String pt=banned_id[idx].replace("*",".");
for(int i=0;i< user_id.length;i++){
if(v[i]==1)continue;
if(Pattern.matches(pt,user_id[i])){
arr.add(user_id[i]);
v[i]=1;
recur(idx+1,user_id,banned_id);
v[i]=0;
arr.remove(arr.size()-1);
}
}
}
}
#dfs #Set