티스토리 뷰

1. 문제

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

 

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

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

programmers.co.kr

 

2. 설명

먼저 받은 문자열에서 알파벳외의 문자를 제거하고(0으로 대체), 소문자로 변환시켜줬다.

그리고 두 글자씩 끊어서 list에 저장하고, 교집합과 합집합을 구했다.

중복이 허용되기 때문에 합집합구할 때 set 사용 못했다.

그냥 자체 함수 구현해서 코딩했다.

 

3. 코드

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        str1 = str1.replaceAll("[^a-zA-Z]","0").toLowerCase();
        str2 = str2.replaceAll("[^a-zA-Z]","0").toLowerCase();
        
        ArrayList<String> aList = new ArrayList<>();
        ArrayList<String> bList = new ArrayList<>();
        
        // 두 글자씩 끊기
        for(int i=0; i<str1.length()-1; i++) {
            if(!str1.substring(i,i+2).contains("0"))
                aList.add(str1.substring(i,i+2));
        }
        for(int i=0; i<str2.length()-1; i++) {
            if(!str2.substring(i,i+2).contains("0"))
                bList.add(str2.substring(i,i+2));
        }
        
        double inter = intersection(aList,bList).size();
        double union = aList.size() + bList.size() - inter;
        
        if(inter == 0 && union == 0)
            return 65536;
        else
            answer = (int)(inter/union * 65536);
        
        return answer;
    }
    // 교집합
    ArrayList<String> intersection(ArrayList<String> A, ArrayList<String> B) {
        A = (ArrayList<String>) A.clone();
        B = (ArrayList<String>) B.clone();
        ArrayList<String> list = new ArrayList<>();
        for(String s : A) {
            if(B.contains(s)) {
                list.add(s);
                B.remove(s);
            }
        }
        return list;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday