## 접근
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(0, 0);
return hs.size();
}
}
|
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[2020 카카오 인턴십] 수식 최대화(Java, 문자열 처리, ArrayList For문 내 원소 삭제) (0) | 2020.09.07 |
---|---|
[2019 카카오 개발자 겨울 인턴십] 호텔 방 배정(Union-Find, Java, 자세한 설명, 접근법) (0) | 2020.08.31 |
[2019 카카오 개발자 겨울 인턴십] 튜플(Java, 깊은 복사, 문자열 처리) (0) | 2020.08.29 |
[2019 KAKAO BLIND RECRUITMENT] 블록 게임(Java, 간단한 코드) (0) | 2020.08.27 |
[2019 KAKAO BLIND RECRUITMENT] 길 찾기 게임(Java, 간단한 코드) (0) | 2020.08.27 |