[프로그래머스] Level3 - 불량 사용자

 
by 박신종

> 문제

문제 : [불량 사용자]



> 문제 풀이

완전탐색으로 풀었으며, 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