ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스/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;
    }
    

     

Designed by Tistory.