1 분 소요

part30. [1차] 뉴스 클러스터링

js ver 1.0

function solution(str1, str2) {
    const convertArray = (str) => {
        str = str.toLowerCase();
        const arr = [];

        for (let i = 0; i < str.length - 1; i++) {
            const [char1, char2] = [str[i], str[i + 1]];

            if (isAlphabet(char1) && isAlphabet(char2)) {
                arr.push(char1 + char2);
            }
        }

        return arr;
    };

    const isAlphabet = (char) => {
        return char.charCodeAt() >= 97 && char.charCodeAt() <= 122;
    };

    const [A, B] = [convertArray(str1), convertArray(str2)];

    if (!A.length && !B.length) {
        return 2 ** 16;
    }

    let union = 0, intersection = 0;

    const findAndRemove = (el) => {
        const index = B.indexOf(el);
        
        if (index != -1) {
            B.splice(index, 1);
            return true;
        }
        
        return false;
    };

    A.forEach(el => {
        if (findAndRemove(el)) {
            intersection++;
        }
    });

    union = A.length + B.length;


    return Math.floor((intersection / union) * (2 ** 16));
}


실행결과_js ver 1.0


js ver 1.1

function solution(str1, str2) {
    const convertArray = str => [...str.toLowerCase()].map((_, i, arr) =>
            isAlphabet(arr[i]) && isAlphabet(arr[i + 1])
                    ? arr[i] + arr[i + 1]
                    : '')
            .filter(Boolean);

    const isAlphabet = char => char?.charCodeAt() >= 97 && char?.charCodeAt() <= 122;

    const [A, B] = [convertArray(str1), convertArray(str2)];

    if (!A.length && !B.length) {
        return 65536;
    }

    const [intersection, union] = [A.filter(el => B.includes(el) && B.splice(B.indexOf(el), 1)).length, A.length + B.length];

    return Math.floor((intersection / union) * (65536));
}


실행결과_js ver 1.0


업데이트: