본문 바로가기
문제풀이/프로그래머스

[JAVA] 프로그래머스 - 뉴스 클러스터링

by 그적 2020. 12. 27.

** 코드는 맨 아래

 

(설명)

 

(예시)

 

(고려사항)

 

(출력형식)

 

(코드)

import java.util.HashMap;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        int sum1=0, sum2=0, inter=0;
        HashMap <String, Integer> map1 = new HashMap<>();
        HashMap <String, Integer> map2 = new HashMap<>();        
        
        
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();
        
        String match = "^[a-zA-Z]*$";
        
        // 집합 A 개수 구하기
        for(int i=0; i<str1.length()-1; i++){
            String str = str1.substring(i, i+2);
            if(!Pattern.matches(match, str)) continue;
            sum1++;
            if(map1.containsKey(str))
                map1.put(str, (map1.get(str)+1));
            else
                map1.put(str, 1);
        }
        // 집합 B 개수 구하기
        for(int j=0; j<str2.length()-1; j++){
            String str = str2.substring(j, j+2);
            if(!Pattern.matches(match, str)) continue;
            sum2++;
            if(map2.containsKey(str))
                map2.put(str, (map2.get(str)+1));
            else
                map2.put(str, 1);
        }
        
        // 집합 A, B의 교집합 구하기
        for(String key: map1.keySet())
            if(map2.containsKey(key))
                inter += map1.get(key)>map2.get(key) ? map2.get(key) : map1.get(key);
        
        // 예외 처리하기
        float tmp = (float)inter/(float)(sum1+sum2-inter);
        try{
            int value = inter/(sum1+sum2-inter);
        }catch(ArithmeticException e){
            tmp = 1;
        }
        
        answer =(int)(65536 * tmp);
        
        return answer;
    }
}

댓글