csct3434
[level 2] 후보키 - 42890 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.HashSet;
import java.util.LinkedList;
class Solution {
public int solution(String[][] relation) {
int rows = relation.length;
int cols = relation[0].length;
LinkedList<Integer> superKeys = new LinkedList<>();
for (int mask = 1; mask < (1 << cols); mask++) {
HashSet<String> uniqueIndexes = new HashSet<>();
for (String[] record : relation) {
StringBuilder index = new StringBuilder();
for (int i = 0; i < cols; i++) {
if ((mask & (1 << i)) != 0) {
index.append(record[i]).append(" ");
}
}
uniqueIndexes.add(index.toString());
}
if (uniqueIndexes.size() == rows) {
superKeys.add(mask);
}
}
LinkedList<Integer> candidateKeys = new LinkedList<>();
for (Integer superKey : superKeys) {
boolean duplicate = candidateKeys.stream()
.anyMatch(candidateKey -> (superKey & candidateKey) == candidateKey);
if (!duplicate) {
candidateKeys.add(superKey);
}
}
return candidateKeys.size();
}
}
'프로그래머스' 카테고리의 다른 글
[level 2] 스킬트리 - 49993 (0) | 2024.02.29 |
---|---|
[level 2] 타겟 넘버 - 43165 (0) | 2024.02.29 |
[level 2] 오픈채팅방 - 42888 (0) | 2024.02.28 |
[level 2] 구명보트 - 42885 (0) | 2024.02.28 |
[level 2] 큰 수 만들기 - 42883 (0) | 2024.02.28 |