(자바) (프로그래머 레벨 2) 뉴스 클러스터링

프로그램 제작자

코드 중심 개발자를 고용하십시오. 스택 기반 위치 일치. 프로그래머를 위한 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

프로그래머.co.kr

내 솔루션

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        // 2글자씩 자르기
        Map<String, Integer> map1 = getSubstringMap(str1.toLowerCase());
        Map<String, Integer> map2 = getSubstringMap(str2.toLowerCase());
        
        // map1, map2의 키값을 각각 순회하면서 map3 map4를 만든다. 이때 map3는 min값으로, map4는 max값으로 만든다.
        Map<String, Integer> minMap = getMinMap(map1, map2);
        Map<String, Integer> maxMap = getMaxMap(map1, map2);
        
        // Math.floor((minMap의 밸류의 합 / maxMap의 밸류의 합 ) * 65536 )
        int minTotal = getTotalValueOfMap(minMap);
        int maxTotal = getTotalValueOfMap(maxMap);
        
        // 공집합 예외처리
        if (minTotal == 0 && maxTotal == 0) return 65536;

        return  (minTotal * 65536) / maxTotal;
    }
    
    private int getTotalValueOfMap(Map<String, Integer> map) {
        int total = 0;
        for (Map.Entry<String, Integer> entry: map.entrySet()) {
            String key = entry.getKey();
            int value = map.get(key);
            total += value;
        }
        return total;
    }
    
    private Map<String, Integer> getMaxMap(Map<String, Integer> map1, Map<String, Integer> map2) {
        Map<String, Integer> map = new HashMap<>();
        for (Map.Entry<String, Integer> entry: map1.entrySet()) {
            String key = entry.getKey();
            int value = Math.max(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
            if (value != 0) {
                map.put(key, value);    
            }
        }
        for (Map.Entry<String, Integer> entry: map2.entrySet()) {
            String key = entry.getKey();
            int value = Math.max(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
            if (value != 0) {
                map.put(key, value);    
            }
        }
        return map;
    }
    
    private Map<String, Integer> getMinMap(Map<String, Integer> map1, Map<String, Integer> map2) {
        Map<String, Integer> map = new HashMap<>();
        for (Map.Entry<String, Integer> entry: map1.entrySet()) {
            String key = entry.getKey();
            int value = Math.min(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
            if (value != 0) {
                map.put(key, value);    
            }
        }
        for (Map.Entry<String, Integer> entry: map2.entrySet()) {
            String key = entry.getKey();
            int value = Math.min(map1.getOrDefault(key, 0), map2.getOrDefault(key, 0));
            if (value != 0) {
                map.put(key, value);    
            }
        }
        return map;
    }
    
    private Map<String, Integer> getSubstringMap(String str){
        Map<String, Integer> map = new HashMap<>();
        char() chars = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length() - 1; i++) {
            if ('a' <= chars(i) && chars(i) <= 'z' && 'a' <= chars(i + 1) && chars(i + 1) <= 'z' ){
                sb.append(chars(i));
                sb.append(chars(i+1));
                String key = sb.toString();
                map.put(key, map.getOrDefault(key,0) + 1);
                sb.deleteCharAt(0);
                sb.deleteCharAt(0);    
            }
        }
        
        return map;
    }
}
  • 내 해결책은 맵을 사용하여 단어 수의 최소값과 최대값을 교집합 수로 계산하는 것입니다.
  • 아래 다른 분들의 솔루션을 찾아보니 ArrayList에 넣어두어서 포함 여부를 확인하고 Intersection List에 넣고, 포함 여부에 관계없이 Union List에 넣는 방법을 선택했습니다. 코드가 더 간결해지고, 시간 복잡도가 더 좋은 코드인 것 같습니다.

다른 사람의 솔루션

Similar Posts

  • 학점은행제 수강신청 방법 주의사항 확인하세요

    학점은행제도 수강신청 시 주의사항을 확인하세요. 학점은행제도 수강신청 시 주의사항을 확인하세요. 학점은행제도 수강신청 시 주의사항을 확인하세요. 안녕하세요~ 학점은행제도를 통한 수강신청부터 학습설계 상담까지 모든 과정을 완료한 배OO 입니다. 이직을 준비하고 있었습니다. 신청서 제출 자격을 갖추려면 일정 수준의 크레딧이 필요했습니다. 가장 쉽고 쉬운 준비 방법은 신용 은행 시스템을 이용하는 것입니다. 관련 정보가 빠르다고 해서 찾아보기 시작했어요. 업무를 하면서…

  • 갤 폴드 6가 지원할 구글 최신 기능 세 가지

    (출처: 구글) 삼성전자가 신제품 출시 행사인 ‘갤럭시 언팩’을 열고 갤럭시 Z 폴드6를 공개했다. 퀄컴 스냅드래곤 8 3세대를 탑재한 갤럭시 Z 폴드6는 시리즈 중 가장 가볍고 방열 기능도 개선됐다. 올해 초 갤럭시 S24 시리즈에 탑재된 갤럭시 AI 기능과 새롭게 추가된 인공지능 기능도 지원해 구글이 개발한 최신 기능 중 일부를 가장 빠르게 사용할 수 있다. 삼성전자는 10일(현지…

  • 유아이갈이 아기이갈이 이갈이 해결방법(ft) 이갈이, 티딩러스크)

    안녕하세요 육아 인플루언서 송애라입니다.로또가 이를 갈기 시작하면서 어느 순간 #아기의 이를 가는 모습을 보여주는 거예요.24개월인 현재는 이전보다 더 #유아기를 바꾸고 있습니다.사실 #이갈이 아이들 보면서 걱정하는 분들 저뿐만이 아닌 것 같아요.오늘은 아기의 이를 가는 원인과 대처 방법에 대해 이야기를 나눠보겠습니다. 아기 이갈이/유아 이갈이는 왜? 이갈이는 성장 과정에서 나타나는 일시적인 현상 중 하나입니다.특히 아기의 첫 번째 치아가…

  • 부산척추교정병원 허리 협착증의 도수 치료를 받다

    부산척추교정병원 허리 협착증의 도수 치료를 받다부산척추교정병원 허리 협착증의 도수 치료를 받다부산척추교정병원 척척의원 한의원에 내원하시는 많은 환자들 중에서 허리디스크라고 생각하여 내원했다가 실제로 다른 질환으로 진단받는 경우가 많습니다.그중에서도 허리협착증은 많은 분들이 허리디스크와 혼동하는 질환입니다. 허리협착증은 퇴행성 질환으로 척추에 터널처럼 있는 파이프 구조인 척추관이 점점 좁아져 신경을 눌러 통증이 발생하는 것을 말합니다.허리협착증은 디스크와 같은 허리 건강을 위협하는 질환입니다….

  • 질염 예방에 좋은 음식 10가지 요약

    여성이라면 누구나 질염을 경험하고, 질염에 좋은 음식 10가지질염을 이해하고 예방하기 위해 함께 노력합시다. 질염에 좋은 음식 플레인 요거트와 치즈 1. 발효식품 유산균이 풍부한외부 세균과 박테리아에 대항하는 발효 식품. 좋은 박테리아를 끝내다따라서 질염과 같은 세균성 질병을 예방하는 데 도움이 됩니다.음식으로 플레인 요거트나 치즈, 김치, 청국장 등. 생강차 2. 생강차 여성의 질 건강에 좋은 생강차, 생리통 완화또한…

  • 결혼예복 디테일한 핏 보니타테일러

    결혼식 준비를 시작하면 준비할 것이 너무 많습니다. 먼저 플래너가 제안한 메이크업 & 드레스 숍을 결정했고, 이제는 예랑이 입을 웨딩드레스를 알아볼 차례였다. 처음에는 기성복을 사볼까 고민했는데, 친구들에게 물어보니 맞춤옷이 여러모로 더 좋다고 하더라고요. 여러 양복점을 가보고 결정하시는 분들도 계셨는데, 저는 평가가 좋은 곳인 예랑인으로 결정했습니다. 제가 살펴본 곳은 종로5가역과 종묘 사이에 위치한 을지로 에보니타 테일러였습니다. 평일에는…