> 문제
문제 : [불량 사용자]
> 문제 풀이
완전탐색으로 풀었으며, hashSet을 사용하여 중복제거를 해주었다.
import java.util.*;
class Solution {
static Set<String> set;
public int solution(String[] user_id, String[] banned_id) {
set = new HashSet<>();
rec(0, user_id, banned_id, new boolean[user_id.length]);
return set.size();
}
static void rec(int depth, String[] user_id, String[] banned_id, boolean[] visit){
if(depth == banned_id.length){
StringBuilder sb = new StringBuilder();
for(int i=0; i<visit.length; i++){
sb.append(visit[i] ? 1 : 0);
}
set.add(sb.toString());
return;
}
for(int i=0; i<user_id.length; i++){
if(visit[i] || banned_id[depth].length() != user_id[i].length()) continue;
boolean check = true; // 매칭되면 true
for(int j=0; j<user_id[i].length(); j++){
if(banned_id[depth].charAt(j) == '*') continue;
if(banned_id[depth].charAt(j) != user_id[i].charAt(j)) {
check = false;
break;
}
}
if(check){
visit[i] = true;
rec(depth+1, user_id, banned_id, visit);
visit[i] = false;
}
}
}
}
문제 출처 : Programmers
PREVIOUS[프로그래머스] Level3 - 방문 길이