반응형
    
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | 
| 26 | 27 | 28 | 29 | 30 | 31 | 
                            Tags
                            
                        
                          
                          - 프로그래머스
- 자바스크립트
- 백준
- 문자열
- 레벨 1
- 쉬운 문제
- 프로그래머스 레벨 2
- 수학
- 그래프
- Node.js
- Crawling
- typescript
- dp
- 소켓
- 타입스크립트
- 크롤링
- javascript
- 타입 챌린지
- BFS
- 가천대
- Algorithm
- dfs
- 알고리즘
- HTTP 완벽 가이드
- HTTP
- Nestjs
- socket
- type challenge
- TCP
- ip
                            Archives
                            
                        
                          
                          - Today
- Total
kakasoo
[node.js] 뉴스 클러스터링 ( 프로그래머스 레벨2 ) 본문
반응형
    
    
    
  // 프로그래머스 레벨2 [1차] 뉴스 클러스터링을 풀었습니다.
// const lastOnlyAlphabet = (str) => {
//     const aCode = 'A'.charCodeAt();
//     const zCode = 'Z'.charCodeAt();
//     return str.toUpperCase().split('').filter((el) => {
//         const cur = el.charCodeAt();
//         if (aCode <= cur && cur <= zCode) {
//             return true;
//         }
//         return false;
//     }).join('');
// }
const makeStrArray = (str) => {
    const aCode = "A".charCodeAt();
    const zCode = "Z".charCodeAt();
    const answer = [];
    for (let i = 0; i < str.length - 1; i++) {
        const cur1 = str[i].charCodeAt();
        const cur2 = str[i + 1].charCodeAt();
        if (aCode <= cur1 && cur1 <= zCode && aCode <= cur2 && cur2 <= zCode) {
            answer.push(str[i] + str[i + 1]);
        }
    }
    return answer;
};
const makeCommonSet = (arr1, arr2) => {
    const answer = [];
    while (arr1.length && arr2.length) {
        const arrInstance1 = arr1.pop();
        if (arr2.includes(arrInstance1)) {
            arr2.splice(arr2.indexOf(arrInstance1), 1);
            answer.push(arrInstance1);
        }
    }
    return answer;
};
const makeSumSet = (arr1, arr2) => {
    const answer = [];
    while (arr1.length && arr2.length) {
        const arrInstance1 = arr1.pop();
        if (arr2.includes(arrInstance1)) {
            arr2.splice(arr2.indexOf(arrInstance1), 1);
        }
        answer.push(arrInstance1);
    }
    while (arr1.length) {
        const arrInstance1 = arr1.pop();
        answer.push(arrInstance1);
    }
    while (arr2.length) {
        const arrInstance2 = arr2.pop();
        answer.push(arrInstance2);
    }
    return answer;
};
const solution = (str1, str2) => {
    str1 = str1.toUpperCase();
    str2 = str2.toUpperCase();
    const strArr1 = makeStrArray(str1);
    const strArr2 = makeStrArray(str2);
    // console.log(strArr1);
    // console.log(strArr2);
    const commonSet = makeCommonSet([...strArr1], [...strArr2]);
    const sumSet = makeSumSet([...strArr1], [...strArr2]);
    // console.log(commonSet);
    // console.log(sumSet);
    const rate = sumSet.length ? commonSet.length / sumSet.length : 1;
    return parseInt(rate * 65536);
};
반응형
    
    
    
  '프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
| [node.js] 행렬 테두리 회전하기 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
|---|---|
| [node.js] 메뉴 리뉴얼 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
| [node.js] 배달 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
| [node.js] 예상 대진표 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
| [node.js] 게임 맵 최단 거리 ( 프로그래머스 레벨2 ) (0) | 2021.06.30 | 
 
                   
                   
                  