6 Aug 2020
2019 카카오 겨울 인턴 불량 사용자 [Java]
2019 카카오 겨울 인턴 튜플 [Java]
문제의도
문제 풀이 방법(2가지)
-
dfs를 활용하여 baned항목을 추출한뒤 set자료구조로 중복 구분
-
비트연산을 이용하여 푸는 방법(<- 추후 풀이 추가 예정)
import java.util.*;
class Solution {
Boolean[] used=new Boolean[8];
//순서에 관계 없이 내용이 동일 하면 같은 것을 처리하기 위해 set자료구조 활용
Set<String> set=new HashSet<>();
//user와 baned id 검사
public boolean check(String user,String banned){
if(user.length()!=banned.length())return false;
for(int i=0;i<user.length();i++){
if(user.charAt(i)!=banned.charAt(i)&&banned.charAt(i)!='*'){
return false;
}
}
return true;
}
public void dfs(String[] user_id, String[] banned_id,int banIdx){
if(banIdx==banned_id.length){
String users="";
for(int i=0;i<user_id.length;i++){
if(used[i]){
users+=user_id[i];
}
}
set.add(users);
return;
}
for(int i=0;i<user_id.length;i++){
if(!used[i]&&check(user_id[i],banned_id[banIdx])){
used[i]=true;
dfs(user_id,banned_id,banIdx+1);
used[i]=false;
}
}
}
public void init(){
for(int i=0;i<8;i++){
used[i]=false;
}
}
public int solution(String[] user_id, String[] banned_id) {
init();
dfs(user_id,banned_id,0);
return set.size();
}
}