본문 바로가기
Problem Solving

[프로그래머스] L3 불량 사용자 / 2019 카카오 겨울 인턴십 (Java)

by JYHAN 2020. 12. 22.

카카오

[프로그래머스] L3 불량 사용자 / 2019 카카오 겨울 인턴십

[풀이]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.*;
class Solution {
    static List<Integer> list = new ArrayList<Integer>();
    static Set<String> answer = new HashSet<String>();
    static boolean[] visit;
    public static int solution(String[] user_id, String[] banned_id) {
        visit = new boolean[user_id.length];
        dfs(0, user_id, banned_id);
        return answer.size();
    }
    static void dfs(int idx, String[] user_id, String[] banned_id){
        if(list.size()==banned_id.length){
            List<Integer> temp = new ArrayList<Integer>();
            for(int i=0; i<list.size(); i++)
                temp.add(list.get(i));
            Collections.sort(temp);
            String s = "";
            for(int i=0; i<temp.size(); i++)
                s += Integer.toString(temp.get(i));
            if(!answer.contains(s))
                answer.add(s);
            return;
        }
        
        for(int i=0; i<user_id.length; i++){
            String uid = user_id[i];
            String bid = banned_id[idx];
            if(visit[i] || (uid.length()!=bid.length())) continue;
            if(!isBanned(uid, bid)) continue;
            visit[i] = true;
            list.add(i);
            dfs(idx+1, user_id, banned_id);
            list.remove(list.size()-1);
            visit[i] = false;
        }
    }
    static boolean isBanned(String uid, String bid){
        int size = uid.length();
        for(int i=0; i<size; i++){
            if(bid.charAt(i)=='*'continue;
            if(uid.charAt(i)!=bid.charAt(i)) return false;
        }
        return true;
    }
}
cs

댓글