Algorithm/Programmers Java

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

제우제우 2024. 3. 4. 22:09

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 분류 : 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT > [1차] 뉴스 클러스터링

난이도 : 2

 

정답 코드

import java.util.*;
class Solution {
    public int solution(String str1, String str2) {
        int a = 0; // 합집합 개수
        int b = 0; // 교집합 개수
        // System.out.println('A'-'0'); // 17
        // System.out.println('Z'-'0'); // 42 
        HashMap<String, Integer> map1 = new HashMap<>();
        for(int i = 0; i < str1.length() - 1; i++){
            String temp = str1.substring(i, i + 2);
            temp = temp.toUpperCase();
            if(temp.charAt(0) - '0' < 17 || 42 < temp.charAt(0) - '0')
                continue;
            if(temp.charAt(1) - '0' < 17 || 42 < temp.charAt(1) - '0')
                continue;
            map1.put(temp, map1.getOrDefault(temp, 0) +1);
        }
        HashMap<String, Integer> map2 = new HashMap<>();
        for(int i = 0; i < str2.length() - 1; i++){
            String temp = str2.substring(i, i + 2); 
            temp = temp.toUpperCase();
            if(temp.charAt(0) - '0' < 17 || 42 < temp.charAt(0) - '0')
                continue;
            if(temp.charAt(1) - '0' < 17 || 42 < temp.charAt(1) - '0')
                continue;
            map2.put(temp, map2.getOrDefault(temp, 0) +1);
        }
        Iterator<Map.Entry<String, Integer>> it = map1.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String, Integer> entry = it.next();
            a += entry.getValue();
            b += Math.min(entry.getValue(), map2.getOrDefault(entry.getKey(), 0));    
        }
        Iterator<Map.Entry<String, Integer>> it2 = map2.entrySet().iterator();
        while(it2.hasNext()){
            Map.Entry<String, Integer> entry = it2.next();
            a += entry.getValue();
        }
        a -= b;
        if(map1.isEmpty() && map2.isEmpty()){
            return 65536;
        }
        System.out.println(a);
        System.out.println(b);
        double answer = 65536 * b / a ;
        return (int)(answer);     
    }
}