프로그래머스 불량사용자

uni.gy·2023년 7월 13일
0

알고리즘

목록 보기
9/61

문제

풀이

정규표현식을 사용하여 제재아이디에 해당하는 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

profile
한결같이

0개의 댓글