본문 바로가기

알고리즘/프로그래머스

[프로그래머스] 불량 사용자 / JAVA

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/64064

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

class Solution {
    public static boolean visited[];
    public static boolean bitmask[];
    public static int ans;
    public static String g_banned_id[];
    public static String g_user_id[];

    public static boolean availMatching(String str, String pattern){
        for(int i=0;i<str.length();i++){
            if(pattern.charAt(i)=='*') continue;
            if(str.charAt(i) != pattern.charAt(i)){
                return false;
            }
        }
        return true;
    }
    public static void dfs(int idx){
        if(idx == g_banned_id.length){
            int mask = 0;
            for(int i=0;i< g_user_id.length;i++){
                if(visited[i]){
                    mask |= (1 << i);
                }
            }
            if(bitmask[mask] != true){
                bitmask[mask] = true;
                ans++;
            }
            return;
        }
        boolean suc = false;
        for(int i=0;i<g_user_id.length;i++){
            if(visited[i]) continue;
            if(g_user_id[i].length() != g_banned_id[idx].length()) continue;
            if(availMatching(g_user_id[i],g_banned_id[idx])){
                visited[i] = true;
                dfs(idx+1);
                visited[i] = false;
            }
        }
    }
    public static int solution(String[] user_id, String[] banned_id) {
        g_user_id = new String[user_id.length];
        g_banned_id = new String[banned_id.length];
        visited = new boolean[user_id.length];
        bitmask = new boolean[(1<<8)];
        for(int i=0;i<user_id.length;i++){
            g_user_id[i] = user_id[i];
        }
        for(int i=0;i< banned_id.length;i++){
            g_banned_id[i] = banned_id[i];
        }

        dfs(0);
        return ans;
    }
}