import java.util.*;
class Solution {
static String[] u_id;
static String[] b_id;
static boolean[] visited;
static int B;
static Set<String> set;
static boolean check(String a, String b){
if(a.length() != b.length())
return false;
for(int i=0; i<a.length(); i++){
if(b.charAt(i) == '*')
continue;
else if(a.charAt(i) != b.charAt(i))
return false;
}
return true;
}
static void dfs(int b_idx){
if(b_idx == B){
StringBuilder s = new StringBuilder();
for(int i=0; i<u_id.length;i++)
if(visited[i])
s.append(String.valueOf(i));
set.add(s.toString());
return;
}
for(int i=0; i<u_id.length;i++){
if(!visited[i] && check(u_id[i], b_id[b_idx])){
visited[i] = true;
dfs(b_idx+1);
visited[i] = false;
}
}
}
public int solution(String[] user_id, String[] banned_id) {
int answer = 0;
u_id = user_id;
b_id = banned_id;
visited = new boolean[u_id.length];
B = b_id.length;
set = new HashSet();
dfs(0);
return set.size();
}
}
백트래킹 알고리즘으러 해결한 문제
주어지는 user_id와 banned_id의 크기가 매우 작으므로 완전탐색이 가능하다.