Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][문자열] 뉴스 클러스터링

by 꽁이꽁설꽁돌 2025. 12. 6.
728x90
반응형
     
목차

     

     

     

    문제

    https://school.programmers.co.kr/learn/courses/30/lessons/17677

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

     

    문제 구현 방향

    문제를 차례차례 시킨대로 하면 풀 수 있는 문제였다.

    1. 문자열 나누기 -> charCodeAt로 범위에 없으면 문자열을 포함시키지 않는다.

    2. map에 str1 str2 순으로 담기 이때 키에 대한 배열로 담는다.

    3. map을 순회하며 합집합 교집합을 구해 준다. 최소가 교집합, 최대가 합집합이 된다.

     

     

    코드 구현

    function solution(str1, str2) {
        function split(str) {
            const arr = [];
            for (let i = 0; i < str.length; i++) {
                let spt = str.slice(i, i + 2);
                if (spt.length === 2) {
                    let flag = spt
                        .split("")
                        .every(
                            (item) =>
                                item.toLowerCase().charCodeAt() >= "a".charCodeAt() &&
                                item.toLowerCase().charCodeAt() <= "z".charCodeAt()
                        );
                    if (flag) arr.push(spt.toLowerCase());
                }
            }
            return arr;
        }
        const arr1 = split(str1);
        const arr2 = split(str2);
    
        const m = new Map();
        for(let ar of arr1){
            if(m.get(ar)){
               m.set(ar, [m.get(ar)[0]+1, 0]);
            }else{
               m.set(ar, [1, 0]);
            }
        }
        for(let ar of arr2){
            if(m.get(ar)){
               m.set(ar, [m.get(ar)[0], m.get(ar)[1]+1]);
            }else{
              m.set(ar, [0, 1]);
            }
        }
        let inter = 0;
        let union = 0;
        for(let [key, value] of m){
            inter += Math.min(...value);
            union += Math.max(...value);
        }
        var answer = inter === 0 && union ===0 ? 65536 : Math.floor(65536 * (inter/union));
        return answer;
    }
    반응형