2019 카카오 개발자 겨울 인턴십 - 불량 사용자
Updated:
Java
2019 카카오 개발자 겨울 인턴십 - 불량 사용자
문제
접근 방법
코드
import java.util.*;
class Solution {
	static int result, banSize, userSize;
	static boolean[] vis;
	static int[] sel;
	static Set<String> set;
	public static int solution(String[] user_id, String[] banned_id) {
        int answer = 0;
        banSize = banned_id.length;
        userSize = user_id.length;
        vis = new boolean[userSize];
        sel = new int[banSize];
        set = new HashSet<>();		// 선택한
        DFS(0,user_id,banned_id);
        result = set.size();
        return answer = result;
    }
    static void DFS(int lv, String[] user_id, String[] banned_id) {
    	// banned_id를 전부 확인 하였을 때
    	if(lv == banSize) {
    		int[] clone = sel.clone();
    		Arrays.sort(clone);
    		String str = Arrays.toString(clone);	// 인덱스를 배열로 만들어 Set에 저장한다.
    		set.add(str);
    		return;
    	}
    	String curBan = banned_id[lv];
    	next : for(int i = 0; i < userSize; i++) {
    		// 현재 ban에 등록되어 있고, 현재 ban id와 길이가 다르면
    		if(vis[i] || user_id[i].length() != curBan.length())
    			continue;
    		for(int j = 0; j < curBan.length(); j++) {
    			if(curBan.charAt(j) == '*')
    				continue;
    			if(curBan.charAt(j) != user_id[i].charAt(j))
    				continue next;
    		}
    		vis[i] = true;
    		sel[lv] = i;
    		DFS(lv + 1, user_id, banned_id);
    		vis[i] = false;
    	}
    }
}