[프로그래머스 Lv.2] 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링

김민지·2023년 12월 17일
0

✨ 문제 ✨


✨ 정답 ✨

const getIntersect=(cutStr1, cutStr2)=>{
    // 교집합 어떻게 구하냐
    // 하나씩 비교하고 같은거 있으면 없애고..?
    let str1=cutStr1.slice();
    let str2=cutStr2.slice();
    let count=0;
    
    for (let i=0;i<cutStr1.length;i++){
        if (str2.indexOf(str1[i])>=0){
            str2.splice(str2.indexOf(str1[i]),1);
            count+=1;
        }
    }
    return count;
}

function solution(str1, str2){
    let cutStr1=[];
    let cutStr2=[]
    // str1, str2 모두 uppercase하고 정규식 쓰고
    let str1Copy=str1.slice().toUpperCase();
    let str2Copy=str2.slice().toUpperCase();
    let checkAlphabet=/^[a-z|A-Z]/;
    // 두개씩 끊어서 배열에 넣기   
    for (let i=0;i<str1.length-1;i++){
        if (checkAlphabet.test(str1Copy[i])&&checkAlphabet.test(str1Copy[i+1])){
            cutStr1.push([str1Copy[i], str1Copy[i+1]].join(''));
        }
    }
    for (let i=0;i<str2.length-1;i++){
        if (checkAlphabet.test(str2Copy[i])&&checkAlphabet.test(str2Copy[i+1])){
            cutStr2.push([str2Copy[i], str2Copy[i+1]].join(''));
        }
    }
// 교집합 구하기
   let intersect= getIntersect(cutStr1, cutStr2);
    // 자카드 유사도 =교집합/합집합
    // 합집합=1번 크기 + 2번 크기 - 교집합 크기
    
    if (intersect===0){
        return 65536;
    }else{
        return Math.floor(intersect/(cutStr1.length+cutStr2.length-intersect)*65536)
    }
    
}

🧵 참고한 정답지 🧵

💡💡 기억해야 할 점 💡💡

교집합 구할 때 두 배열을 모두 줄여나가면서 비교하면 안된다.
하나는 그대로 두고 나머지 하나만 줄여나가면서 비교해야 한다.

profile
이건 대체 어떻게 만든 거지?

0개의 댓글

관련 채용 정보