Level
프로그래머스 Lv2
Day
15일
kakao
2018 카카오 블라인드
 
function solution(str1, str2) {
    var answer = 0;
    
    const getSub = str => {
        const subset = {}
        for(let i=0; i<str.length-1; i++){
            const sub = str.slice(i, i+2).toUpperCase();
            if(/^[A-Za-z]+$/.test(sub)){
                subset[sub] = subset[sub] ? subset[sub] + 1 : 1;
            }
        }
        return subset;
    }
    
    const subset1 = getSub(str1);
    const subset2 = getSub(str2);
    
    if(Object.keys(subset1).length===0 && Object.keys(subset2).length===0) return 65536;
    
    const intersect = {}
    const union = {...subset1}
    
    Object.keys(subset2).forEach(set => {
        if(subset1[set]){
            intersect[set] = Math.min(subset1[set], subset2[set]);
            union[set] = Math.max(subset1[set], subset2[set]);
        }else{
            union[set] = subset2[set];
        }
    })

    return Math.floor(Object.values(intersect).reduce((acc, value) => acc + value, 0) / Object.values(union).reduce((acc, value) => acc + value, 0) * 65536);
}