프로그래머스 #javascript - [1차]뉴스클러스터링

SSO·2020년 5월 11일
0

프로그래머스 Lv2

목록 보기
38/46
post-custom-banner

문제

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

풀이

function solution(str1, str2) {
    var answer = 0;
    var arr1 = [];
    var arr2 = [];
    var regEx = /^[a-zA-Z]+$/;
    
    // 1. 2글자씩 끊어서 다중집합 구하기 -  영문만 고려, 대소문자 무시
    for(var i=0; i<str1.length-1; i++){
        var subStr = str1.toLowerCase().substring(i, i+2);
        if(regEx.test(subStr)){
           arr1.push(subStr);
           }
    }
    
    for(var j=0; j<str2.length-1; j++){
        var subStr = str2.toLowerCase().substring(j, j+2);
        if(regEx.test(subStr)){
           arr2.push(subStr);
           }
    }
  
  // 2. 합집합, 교집합 구하기
  var union = [] // 중복포함, 합집합 배열 (multi set)
  var intersect = [] // 중복포함, 교집합 배열

  for (var i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) >= 0) {
      intersect.push(arr1.splice(arr1.indexOf(arr2[i]), 1)) //***교집합
    }
    union.push(arr2[i]) //***합집합
  }

  for (var i = 0; i < arr1.length; i++) { // ***합집합에 arr1 차집합 넣어주기
    union.push(arr1[i])
  }

  // 3. 유사도 구하기, 예외처리
    if( union.length === 0 ){
        answer = 65536;
    }else{
        answer = Math.floor((intersect.length / union.length) * 65536);
    } 

    return answer;
}

더 생각해보기

js 합집합 교집합 차집합
교집합
let difference = arr1.filter(x => arr2.includes(x));
차집합
let difference = arr1.filter(x => !arr2.includes(x));
참고
1.https://zetawiki.com/wiki/JavaScript_%ED%95%A9%EC%A7%91%ED%95%A9,_%EA%B5%90%EC%A7%91%ED%95%A9,_%EC%B0%A8%EC%A7%91%ED%95%A9,_%EB%8C%80%EC%B9%AD%EC%B0%A8
2. https://88240.tistory.com/519 [shaking blog]
3. https://m.blog.naver.com/PostView.nhn?blogId=wj8606&logNo=221328024033&proxyReferer=https:%2F%2Fwww.google.com%2F

참고사항

profile
happy
post-custom-banner

0개의 댓글