개발/algorithm

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

zzi_on2 2022. 4. 11. 21:13

문제 링크

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

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

풀이 

- defaultdict 사용해서 풀이 

from collections import defaultdict

def solution(str1, str2):
    # 대문자로 통일     
    str1 = str1.upper()
    str2 = str2.upper()
    
    # 원소별 개수 저장 
    x = defaultdict(int)
    y = defaultdict(int)
    # 교집합 개수
    inter = 0
    # 합집합 개수 
    union = 0 
    
    
    for i in range(0, len(str1)-1):
        # 두 글자씩 끊어서 공백 제거 후 
        s1 = str1[i:i+2]
        s1 = s1.replace(" ", "")
        
        # 길이가 2이고 영어로만 구성되어 있으면 
        if len(s1) == 2 and s1.isalpha() :
            # value + 1 
            x[(str1[i:i+2])] += 1 
            # 합집합 개수 + 1 
            union += 1 
            
    for i in range(0, len(str2)-1) :
        s2 = str2[i:i+2]

        if len(s2) == 2 and s2.isalpha() :
            y[str2[i:i+2]] += 1 
            union += 1 
     
     # x의 원소들에 대해        
    for i in x :
        # y에도 존재하는 원소이면, 즉 교집합이면 
        if i in y:
            # 더 작은 값 교집합의 개수에 더하기 
            inter += min(x[i],y[i])
      
    # 합집합에서 교집합 제거       
    union -= inter 
    
    # 합집합 0 이면 
    if union == 0 :
        return 65536
    
    return int(inter/union * 65536)