Algorithm
[프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT) - JavaScript
HONGNEW
2021. 3. 7. 16:52
이전에 Java로 풀었던 후보키 문제를 JavaScript로 다시 풀어봤습니다.
아이디어 자체는 같으나 언어에 따라 사용하는 자료구조나 메소드에 조금씩 차이가 있기 때문에 한 번 다시 풀어봤습니다.
const candidateSet = [];
const combSet = new Set();
function solution(relation) {
let answer = 0;
for(let i = 1; i<1<<relation[0].length; i++){ // 비트마스크를 이용한 조합 생성
if(!checkCandidate(i, relation)) continue; // 유일성을 만족하지 않는 경우
if(checkSubSet(i)) continue; // 최소성을 만족하지 않는 경우
candidateSet.push(i);
}
answer = candidateSet.length;
return answer;
}
const checkCandidate = (key, relation) => {
const checkSet = new Set();
for(let i = 0; i<relation.length; i++){
let keyStr = "";
for(let j=0; j<relation[0].length; j++){
if(key&1<<j) keyStr+=relation[i][j]; // 비트마스크를 이용해 해당하는 키 값 가져오기
}
if(checkSet.has(keyStr)) {
return false;
}
checkSet.add(keyStr);
}
return true;
}
const checkSubSet = (key) => {
for(let candidate of candidateSet){
if((key&candidate)===candidate) return true; // 비트마스크를 이용한 부분집합 판단
}
return false;
}
* 조합 구할 때 성능을 위해 비트 마스크 이용하기(재귀 X)
이전 글
2021/01/09 - [Algorithm] - [프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT)
[프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT)
프로그래머스에서 2019 카카오 코테에 출제되었던 후보키 문제를 풀어보았습니다. 주어진 데이터베이스에서 유일성과 최소성을 만족하는 가능한 후보키의 개수를 구하는 문제입니다. 이 문제에
hongnewhonglog.tistory.com