상세 컨텐츠

본문 제목

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

💯ProblemSolving/문제 풀이-Java

by :부셔져버린개발자 2025. 2. 1. 12:31

본문

       문제 요약        

- 문제

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

         아이디어        

Set 

retainAll : 교집합

addAll : 합집합

 

aa, aa, ..  이런  중복을 허용해야 하므로 개수를 세야 했다 

         소스코드        

 

 

import java.util.*;
class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        Map<String,Integer> setOne = createSet(str1);
        Map<String, Integer> setTwo = createSet(str2);
        
        Set<String> added = new HashSet<>();
        added.addAll(setOne.keySet());
        added.addAll(setTwo.keySet());

        int x = 0;
        for(String a : added) {
            x += Math.max(setOne.getOrDefault(a, 0),setTwo.getOrDefault(a, 0));
        }   
        
        Set<String> oneKeys = new HashSet<>(setOne.keySet()); 
        oneKeys.retainAll(setTwo.keySet());

        int y = 0;
        for(String o : oneKeys) {
            y += Math.min(setOne.getOrDefault(o, 0), setTwo.getOrDefault(o, 0));
        }
        
        // addAll : 합집합, retainAll : 교집합
        if (x == 0) {
            answer = 65536;
        } else {
            answer = 65536 * y / x;
        }
        
        return answer;
    }
    static boolean isAlphabet(char a) {
        return a >= 'a'&& a <= 'z' || a >= 'A' && a <= 'Z';
    }
    // 영문자 2글자씩 
    static Map<String, Integer> createSet(String str){
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length() - 1; i++) {
            char a = str.charAt(i);
            char b = str.charAt(i+1);
            if (isAlphabet(a) && isAlphabet(b)) {
                String value = ""+a+b;
                map.put(value.toLowerCase(), map.getOrDefault(value.toLowerCase(), 0) + 1);
            }
        }
        return map;
    }
}
728x90

관련글 더보기