말랑한 하루

[Programmers] 뉴스 클러스터링 (Lv 2, JavaScript) 본문

문제풀이/Programmers

[Programmers] 뉴스 클러스터링 (Lv 2, JavaScript)

지수는말랑이 2022. 9. 20. 14:16
반응형

[ 학습 내용 ]
다중집합에서 차집합과 교집합의 개수에 관해 구할 때, 두 집합의 절대원소를 통해 알아낼 수 있다.

절대원소를 순회하며, 각 집합에서 원소의 개수를 판단하고, 두 원소 개수 값 중 작은값은 교집합, 큰값은 합집합으로 판별하여 문제를 해결한다.

 

- Set

const set = new Set([...ary1, ...ary2]);

Set, Map 활용도는 무궁무진하니 틈틈히 익혀두자

[ 소스 코드 ]

function solution(str1, str2) {
    var answer = 0;
    
    str1 = str1.toLowerCase().split("");
    str2 = str2.toLowerCase().split("");
    
    var reg = new RegExp(/[^a-z]/g, "");
    
    const makeJacade = (str) => {
        return str.map((fixed, index, origin) => {
            if (index === 0) return;
            return origin[index - 1] + fixed;
        }).filter((item) => !reg.test(item) && item != undefined);
    }
    
    var jacade1 = makeJacade(str1);
    var jacade2 = makeJacade(str2);
    
    if (jacade1.length === 0 && jacade2.length === 0) return 65536;
    
    const setJacade = new Set([...jacade1, ...jacade2]);
    
    var inter = 0, union = 0;
    
    setJacade.forEach((item) => {
        const has1 = jacade1.filter(it => it === item).length;
        const has2 = jacade2.filter(it => it === item).length;
        inter += Math.min(has1, has2);
        union += Math.max(has1, has2);
    })
    
    return parseInt(inter / union * 65536);
}

[ 코드 분석 ]

정규식을 통해 문자쌍을 정리한다. map의 특성으로 인해 undefined를 제거하는 요소도 추가되었다.

반응형
Comments