티스토리 뷰

728x90
 

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

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

programmers.co.kr

 

풀이 : 

1. 다중집합 1,2를 선언한다

2. 소문자 대문자를 구분하지 않기 때문에 영문자를 모두 소문자로 바꿔준다.

3. 다중집합 1과 2를 만들어준다 #알파벳만 가능 

4. 합지합과 교집합을 구하기 위해 다중집합 1에 원소를 하나씩 꺼내서 다중집합 2를 지워준다.

5. 다중집합 1이 다중집합2에 포함되어 있다면 교집합 intersection +1 씩 해준다. union은 합집합이기 때문에 +1을 계속해준다.

6. 집합 2에 남아있는 원소가 있을수도 있으니 이걸 합집합에 다 넣어준다.

public int solution(String str1, String str2) {
    int answer = 0;
    ArrayList<String> multiSet1 = new ArrayList<>();
    ArrayList<String> multiSet2 = new ArrayList<>();
    int union = 0;
    int intersection = 0;
    str1 = str1.toLowerCase();
    str2 = str2.toLowerCase();
    for (int i = 1; i < str1.length(); i++) {
        char t1 = str1.charAt(i - 1);
        char t2 = str1.charAt(i);
        if (Character.isAlphabetic(t1) && Character.isAlphabetic(t2)) {
            multiSet1.add(t1 + "" + t2);
        }
    }
    for (int i = 1; i < str2.length(); i++) {
        char t1 = str2.charAt(i - 1);
        char t2 = str2.charAt(i);
        if (Character.isAlphabetic(t1) && Character.isAlphabetic(t2)) {
            multiSet2.add(t1 + "" + t2);
        }
    }
    for (String s : multiSet1) {
        if (multiSet2.remove(s)) {
            intersection++;
        }
        union++;
    }
    union += multiSet2.size();
    double jakard = 0;

    if (union == 0) {
        jakard = 1;
    } else {
        jakard = (double) intersection/ (double) union;
    }
    return (int) (jakard * 65536);
}
댓글
최근에 달린 댓글
최근에 올라온 글
Total
Today
Yesterday
«   2025/10   »
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