CS/알고리즘_KAKAO BLIND RECRUITMENT

2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링

Jedy_Kim 2021. 10. 27. 22:12
728x90

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

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

 

// 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.*;
 
class Solution {
    
    static final int GIVENNUM = 65536;
    
    public int solution(String str1, String str2) {
        
        List<String> myList = new ArrayList<>();
        
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();        
        
        // str1을 규칙에 맞게 처리해준다.
        for(int i=0; i<(str1.length()-1); ++i) {            
            char c1 = str1.charAt(i);
            char c2 = str1.charAt(i+1);
            
            // 조건에 부합하는 문자열을 list에 담는다.
            if( (c1>='a' && c1<='z'&& (c2>='a' && c2<='z') ) myList.add( (c1+""+c2) );
        }
        
        // 교집합 부분
        int intersectionNum = 0
        // 합집합 부분 : 어차피 합집합이므로 최소 myList크기와 같거나 크다.
        int unionNum = myList.size();
        
        for(int i=0; i<(str2.length()-1); ++i) { 
            char c1 = str2.charAt(i);
            char c2 = str2.charAt(i+1);  
            
            if( (c1>='a' && c1<='z'&& (c2>='a' && c2<='z') ) {                
                String temp = c1 + "" + c2;
                
                if(myList.contains(temp)) { // 교집합 처리부분
                    ++intersectionNum;
                    myList.remove(temp);
                }
                else ++unionNum; // 합집합 처리부분
            } 
        }
        
        if( (intersectionNum == 0&& (unionNum == 0) ) return GIVENNUM;
        return (int)((intersectionNum/(double)unionNum) * GIVENNUM);
    }
}
cs
반응형