
교집합 + A (나머지) =A
라고 생각하면 빠르게 구할수 있다.
function solution(str1, str2) {
var answer = 0;
// var Max_count= Math.max(str1.length, str2.length);
var puhs_str1=[];
var puhs_str2=[];
for(var i=0; i<str1.length; i++){
if(
(
(str1.charCodeAt(i)>=65 &&str1.charCodeAt(i)<=90)
|| (str1.charCodeAt(i)>=97 &&str1.charCodeAt(i)<=122)
)
&&
(
(str1.charCodeAt(i+1)>=65 &&str1.charCodeAt(i+1)<=90)
|| (str1.charCodeAt(i+1)>=97 &&str1.charCodeAt(i+1)<=122)
)
)
{
puhs_str1.push ( (str1[i]+str1[i+1]).toLowerCase())
}
}
for(var i=0; i<str2.length; i++){
if(
(
(str2.charCodeAt(i)>=65 &&str2.charCodeAt(i)<=90)
|| (str2.charCodeAt(i)>=97 &&str2.charCodeAt(i)<=122)
)
&&
(
(str2.charCodeAt(i+1)>=65 &&str2.charCodeAt(i+1)<=90)
|| (str2.charCodeAt(i+1)>=97 &&str2.charCodeAt(i+1)<=122)
)
)
{
puhs_str2.push ( (str2[i]+str2[i+1]).toLowerCase())
}
}
//2개씩 체크해주면서 배열 구하기
var gogo=[]; // 교집합 구하는 식
var total=[];// 합집합
for(var i=0; i<puhs_str1.length; i++){
if(puhs_str2.includes(puhs_str1[i])){
gogo.push(puhs_str1[i]);
var find_indx=puhs_str2.indexOf(puhs_str1[i]);
puhs_str2.splice(find_indx,1);
puhs_str1.splice(i,1);
i-=1;
}
}
// 같은거 나오는 경우에는 push 해주고 서로의 집합에서 splice 해준다.
//i-=1 해준이유는 i 가 계속이동하기 때문에 에러가 발생
total= gogo.concat( puhs_str2.concat(puhs_str1));
//전체를 concat 으로 2번 묶어서 합집합 구하기
var gogo= Math.floor(( (gogo.length)/(total.length) ) * console.log(gogo,'total')
if(gogo==1 || isNaN(gogo)){
return 65536;
}
return gogo;
}
function solution (str1, str2) {
//
function explode(text) {
const result = [];
for (let i = 0; i < text.length - 1; i++) {
const node = text.substr(i, 2);
if (node.match(/[A-Za-z]{2}/)) {
result.push(node.toLowerCase());
}
}
return result;
}
const arr1 = explode(str1);
const arr2 = explode(str2);
const set = new Set([...arr1, ...arr2]);
let union = 0;
let intersection = 0;
//같은 원소를 검사해서 많은 쪽은 union에 더하고 적은쪽은 intersection에 더한다.
set.forEach(item => {
const has1 = arr1.filter(x => x === item).length;
const has2 = arr2.filter(x => x === item).length;
union += Math.max(has1, has2);
intersection += Math.min(has1, has2);
})
return union === 0 ? 65536 : Math.floor(intersection / union * 65536);
}