새소식

Programmers

[Programmers] [1차] 뉴스 클러스터링 문제 - (javascript)

  • -
728x90

 

문제 이름 :  [1차] 뉴스 클러스터링 문제

 

<<< 문제 내용 >>>

 

function solution(str1, str2) {
    let answer = 0;
    
    // toLowerCase로 소문자로 만든 후 배열로변경
    str1 = str1.toLowerCase().split('');
    str2 = str2.toLowerCase().split('');
    let temp1 = [];
    let temp2 = [];
    
    // str들 2개씩 자른 후, 영어 소문자면 temp에 저장
    const getStr = (arr, temp) => {
        arr.map((el, i) => {
            let check = arr.slice(i, i+2).join('');
            if(check.match(/[a-z]{2}/)) temp.push(check);
        });
    }
    
    getStr(str1, temp1);
    getStr(str2, temp2);
    
    // all은 전체 집합 수, interSection은 교집합
    // 후에 union은 합집합
    
    let all = temp1.length+temp2.length;
    let interSection = [];
    
    // 2개씩 자른 값이 옆의 2개씩 자른 값에 있다면
    // 중복을 방지하기 위해 splice를 이용해 제거하기
    // teseCase 5, 9, 10, 11 이 중복 문제 때문임
    for(let i of temp1){
        if(temp2.includes(i)) {
            interSection.push(i);
            let check = temp2.indexOf(i);
            temp2.splice(check,1)
        }
    }
    
    let interLen = interSection.length;
    let unionLen = all - interLen;
    
    return answer = isNaN(interLen/unionLen) ? 65536 : Math.floor(interLen/unionLen*65536);
}

* 전체 코드 자체는 무난하게 작성하였지만, 중복을 고려하지 못해서 고전했다.

이런 구현 문제는 꼼꼼함이 중요한 것 같지만 테스트케이스를 떠올리는게 시간소비가 크다.

 

어떻게 해야 한번에 꼼꼼하게 처리할 수 있을지가 주된 고민이다..

 

 

 

 

도움이 되셨다면 공감 부탁드립니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.