본문 바로가기

알고리즘/프로그래머스

[2019 카카오 개발자 겨울 인턴십] 불량 사용자

## 접근


1. 불량 사용자와 대응하는 응모자 아이디의 모든 조합을 살펴봐야 한다. 완전 탐색이 필요하다.

 

 

 

2. 만들어 질 수 있는 모든 조합을 탐색을 할 때, 같은 응모자 아이디로 이루어진 조합은 제외해야 하므로, 비트마스크를 통해서 코드를 구성한다.

* 비트마스크로 만들어진 결과를 Set 자료구조에 저장하면서 중복을 제거한다.

 

 

 

 

## 해설코드


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
46
47
48
49
50
import java.util.*;
import java.io.*;
import java.lang.*;
 
class Solution {
    String[] b;
    String[] u;
    HashSet<Integer> hs;
    
    void func(int idx, int bit){
        //System.out.println(Integer.toBinaryString(bit));
        if(idx == b.length){
            hs.add(bit);
            return;
        }
        
        for(int i = 0; i < u.length; i++){
            if((bit & (1 << i)) == 0 && b[idx].length() == u[i].length()){
                boolean flag = true;
                for(int j = 0; j < b[idx].length(); j++){
                    if(b[idx].charAt(j) == '*')
                        continue;
                    
                    if(b[idx].charAt(j) != u[i].charAt(j)){
                        flag = false;
                        break;
                    }
                }
                
                if(flag){
                    func(idx + 1, bit |  (1 << i));
                }
            }
        }
    }
    
    
    public int solution(String[] user_id, String[] banned_id) {
        u = new String[user_id.length];
        u = user_id;
        
        b = new String[banned_id.length];
        b = banned_id;
        
        hs = new HashSet<>();
        
        func(00);
        return hs.size();
    }
}