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)
}
}
교집합 구할 때 두 배열을 모두 줄여나가면서 비교하면 안된다.
하나는 그대로 두고 나머지 하나만 줄여나가면서 비교해야 한다.