Java

프로그래머스: [1차] 뉴스 클러스터링

Daeryuk Kim 2024. 3. 7. 16:40
import java.util.*;

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

        Map<String, Integer> map1 = new HashMap<>();
        Map<String, Integer> map2 = new HashMap<>();

        for (int i = 0; i < str1.length() - 1; i++) {
            char first = str1.charAt(i);
            char second = str1.charAt(i + 1);
            if (Character.isLetter(first) && Character.isLetter(second)) {
                map1.put(str1.substring(i, i + 2), map1.getOrDefault(str1.substring(i, i + 2), 0) + 1);
            }
        }

        for (int i = 0; i < str2.length() - 1; i++) {
            char first = str2.charAt(i);
            char second = str2.charAt(i + 1);
            if (Character.isLetter(first) && Character.isLetter(second)) {
                map2.put(str2.substring(i, i + 2), map2.getOrDefault(str2.substring(i, i + 2), 0) + 1);
            }
        }

        int intersection = 0;
        int union = 0;

        for (String key : map1.keySet()) {
            if (map2.containsKey(key)) {
                intersection += Math.min(map1.get(key), map2.get(key));
                union += Math.max(map1.get(key), map2.get(key));
                map2.remove(key);
            } else {
                union += map1.get(key);
            }
        }

        for (String key : map2.keySet()) {
            union += map2.get(key);
        }

        double jakard = 0;
        if (union != 0) {
            jakard = (double)intersection / union;
        } else if (map1.size() == 0 && map2.size() == 0) {
            jakard = 1;
        }

        return (int)(jakard * 65536);
    }
    public static void main(String[] args) {
        String str1 = "FRANCE";
        String str2 = "french";
        Solution sol = new Solution();
        System.out.println(sol.solution(str1, str2));
    }
}