[프로그래머스] 불량 사용자
2020. 4. 22. 14:45ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
int answer;
List<ArrayList> list = new ArrayList<>();
public int solution(String[] user_id, String[] banned_id) {
boolean[] visited = new boolean[user_id.length];
dfs(user_id,banned_id,0,0,visited);
return answer;
}
private void dfs(String[] user_id, String[] banned_id, int index, int checkIdNumber, boolean[] visited) {
if (checkIdNumber == banned_id.length) { //banned_id에 해당되는 수만큼 맵핑했다면
ArrayList<String> temp = new ArrayList<>();
for(int i=0; i<visited.length; i++){
if(visited[i]){
temp.add(user_id[i]);
}
}
int cnt =0;
for(int i=0; i<list.size(); i++){
ArrayList<String> imsi = list.get(i);
boolean flag = false;
for(int j=0; j<temp.size(); j++){
if(!temp.contains(imsi.get(j))){
flag = true;
}
}
if(flag == true){
cnt++;
}
}
if(cnt == list.size()){
list.add(temp);
answer++;
}
return;
}
for (int i=0; i<user_id.length; i++) {
if(compareBan(user_id[i],banned_id[index])) {
if(!visited[i]){
visited[i] = true;
dfs(user_id,banned_id, index+1, checkIdNumber+1,visited);
visited[i] = false;
}
}
}
}
private boolean compareBan(String user, String ban) {
List<Integer> starLocation = new LinkedList<>();
StringBuilder s = new StringBuilder(user);
if(user.length()!=ban.length()){
return false;
}else{
for(int i=0; i<ban.length(); i++){
if(ban.charAt(i)=='*'){
starLocation.add(i);
}
}
for(int i=0; i<starLocation.size(); i++){
s.setCharAt(starLocation.get(i),'*');
}
}
if(s.toString().equals(ban)){
return true;
}else{
return false;
}
}
}
DFS를 통한 완전탐색을 한 것인데 코드가 많이 복잡한 것 같다.
좀더 깔끔하게 짜보도록 해야겠다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 징검다리 건너기 (0) | 2020.04.24 |
---|---|
[프로그래머스] 호텔 방 배정 (0) | 2020.04.22 |
[프로그래머스] 괄호변환 (0) | 2020.04.18 |
[프로그래머스] 후보 키 (0) | 2020.04.15 |
[프로그래머스] [Level 4]무지의 먹방 라이브 (0) | 2020.04.14 |