🖇️ 문제 링크
📝 문제 분석
각 컬럼들의 모든 부분 집합을 만든다.
이 부분집합에 해당하는 속성들을 뽑아서 set에 저장
set사이즈와 튜플 사이즈가 같다면 후보키
이제 최소성 만족해야함
후보키 등록할 때, 기존 후보키가 지금 내가 만든 후보키에 포함되면 x → &연산으로 확인
⌨️ 코드
import java.util.*;
class Solution {
public int solution(String[][] relation) {
// 튜플 개수
int n = relation.length;
// 속성 개수
int m = relation[0].length;
ArrayList<Integer> ans = new ArrayList<>();
// 부분 집합 생성
for(int i = 1; i < (1 << m); i++) {
HashSet<String> s = new HashSet<>();
for (String[] strings : relation) {
String now = "";
for (int k = 0; k < m; k++)
if ((i & (1 << k)) != 0)
now += strings[k];
s.add(now);
}
if(s.size() == n && chk(ans, i))
ans.add(i);
}
return ans.size();
}
static boolean chk(ArrayList<Integer> al, int now) {
for (Integer n : al)
if ((now & n) == n)
return false;
return true;
}
}
Uploaded by Notion2Tistory v1.1.0