상세 컨텐츠

본문 제목

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

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 7. 4. 16:03

본문

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

 

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

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

programmers.co.kr

 

풀이

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();

        LinkedList<String> list1 = new LinkedList<>();
        LinkedList<String> list2 = new LinkedList<>();

        for (int i = 2; i <= str1.length(); i++) {
            String str = str1.substring(i - 2, i);
            if (str.matches("^[a-z][a-z]$")) {
                list1.add(str);
            }
        }

        for (int i = 2; i <= str2.length(); i++) {
            String str = str2.substring(i - 2, i);
            if (str.matches("^[a-z][a-z]$")) {
                list2.add(str);
            }
        }

        if (list1.size() > list2.size()) {
            return fn(list2, list1);
        } else {
            return fn(list1, list2);
        }
    }

    public int fn(LinkedList<String> list1, LinkedList<String> list2) {
        if (list1.size() == 0 && list2.size() == 0) {
            return 65536;
        }

        Iterator<String> iter = list1.iterator();
        LinkedList<String> compareList = new LinkedList<>(list2);
        int cnt = 0;

        while (iter.hasNext()) {
            String str = iter.next();
            if (compareList.contains(str)) {
                compareList.remove(str);
                cnt++;
            }
        }

        return (int)(65536 * cnt / (double)(list1.size() + list2.size() - cnt));
    }
}

관련글 더보기

댓글 영역