## 접근
1. 비트마스크를 사용해서, 모든 조합을 탐색하기 시작한다. 조합마다 HashSet 자료구조를 이용해서 유일성을 만족시키는지 검사한다.
2. 유일성을 만족한다면 최소성도 만족하는지 검사해야 하는데, 기존의 정답들을 담아두는 자료구조와 비교하여 최소성 만족 유무 확인한다.
## 해설코드
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import java.util.*;
import java.io.*;
import java.lang.*;
class Solution {
String[][] r;
boolean check(String s){
boolean result = true;
String[] sArr = s.split(" ");
HashSet<String> hs = new HashSet<String>();
for(int i = 0; i < r.length; i++){
String tmp = "";
for(int j = 0; j < sArr.length; j++){
tmp = tmp + "," + r[i][Integer.valueOf(sArr[j])];
}
if(hs.contains(tmp)) return false;
hs.add(tmp);
}
return result;
}
public int solution(String[][] relation) {
int answer = 0;
int r = relation.length;
int c = relation[0].length;
ArrayList<Integer> aList = new ArrayList<>();
for(int i = 1; i < (1 << c); i++){
HashSet<String> hs = new HashSet<>();
for(int j = 0; j < r; j++){
String tmp = "";
for(int k = 0; k < c; k++){
if((i & (1 << k)) > 0)
tmp += relation[j][k];
}
hs.add(tmp);
}
if(hs.size() == r){
boolean flag = true;
for(int num : aList){
if((num & i) == num){
flag = false;
break;
}
}
if(flag){
answer += 1;
aList.add(i);
}
}
}
return answer;
}
}
|
'알고리즘' 카테고리의 다른 글
[2019 KAKAO BLIND RECRUITMENT] 매칭 점수(C++) (0) | 2020.01.10 |
---|---|
[2019 KAKAO BLIND RECRUITMENT] 무지의 먹방 라이브(시행착오 포함) (0) | 2020.01.01 |
[2020 KAKAO BLIND RECRUITMENT] 블록 이동하기(Java, 간단한 코드, DFS? or BFS?) (2) | 2019.12.26 |
[2020 KAKAO BLIND RECRUITMENT] 외벽 점검 (문제접근법, 해설 이해하기) (0) | 2019.12.17 |
[삼성 코딩 테스트] 코딩테스트 잘보는법, 자주 실수하는 유형(C++) (0) | 2019.10.20 |