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;
}
}
}