카테고리 없음

[프로그래머스/javascript] 뉴스 클러스터링

_서리__ 2023. 2. 21. 16:35
function solution(str1, str2) {
    //자카드유사도: 두집합의 교집합 크기를 합집합크기로 나눈 값
    //모두 공집합인 경우에는 1.
    //65536을 곱해서 floor.
    let newStr1={};
    let newStr2={};
    let alphabet = 'abcdefghijklmnopqrstuvwxyz'
    let answer = 0;
    let union=[];
    let intersection=[];
    alphabet = alphabet.split('')
    if(str1.length===0&&str2.length===0) return 1
    str1=str1.toLowerCase();
    str2=str2.toLowerCase();
    for(let i=0;i<str1.length-1;i++){
        if(alphabet.includes(str1[i])&&alphabet.includes(str1[i+1])){
            if(!newStr1[str1[i]+str1[i+1]]){newStr1[str1[i]+str1[i+1]]=1}
            else newStr1[str1[i]+str1[i+1]]++;

        }
    }
    for(let i=0;i<str2.length-1;i++){
        if(alphabet.includes(str2[i])&&alphabet.includes(str2[i+1])){
            if(!newStr2[str2[i]+str2[i+1]]){newStr2[str2[i]+str2[i+1]]=1}
            else newStr2[str2[i]+str2[i+1]]++;

        }
    }
    for(let key in newStr1){
        if(newStr2[key]>0){
        while(newStr1[key]>0&&newStr2[key]>0){
            intersection.push(key);
            union.push(key);
            newStr2[key]--;
            newStr1[key]--;
        }}
    }
    for(let key in newStr1){
        while(newStr1[key]>0){
            union.push(key);
            newStr1[key]--;
        }
    }
    for(let key in newStr2){
        while(newStr2[key]>0){
            union.push(key);
            newStr2[key]--;
        }
    }
    if(union.length===0) return 65536
    answer = Math.floor((intersection.length/union.length)*65536)
    return answer;
}