알고리즘/문제풀이

[Python] programmers 뉴스 클러스터링

정찡이 2021. 12. 4. 23:36
728x90

1. 문제 링크

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

 

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

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

programmers.co.kr

2. 문제 요약

두 문자열의 자카드 유사도를 출력

  • 자카드 유사도: 교집합 크기 / 합집합 크기

 

3. 아이디어 정리

  1. 문자열 2개씩 끊기
  2. 교집합, 합집합 구하기
  3. 다중집합 구하기
    • 교집합: 두 교집합에서 갯수 최소값
    • 합집합: 두 교집합에서 갯수 최대값

 

4. 문제 풀이

4-1. 내 풀이

 

import math

def get_set(s):
    list_ = list()
    for c1, c2 in zip(s, s[1:]):
        new = str(c1 + c2).lower()
        if new.isalpha():
            list_.append(new)
    return list_

def solution(str1, str2):
    # 1. 문자열 끊기
    list_1 = get_set(str1)
    list_2 = get_set(str2)
    if len(list_1) == 0 and len(list_2) == 0:
        answer = 1
    else:
        # 2. 교집합, 합집합 구하기
        inter = set(list_1) & set(list_2)
        uni = set(list_1) | set(list_2)
        # 3. 다중집합 구하기
        inter_list = [min(list_1.count(i), list_2.count(i)) for i in inter]
        uni_list = [max(list_1.count(i), list_2.count(i)) for i in uni]

        answer = sum(inter_list) / sum(uni_list)
    answer = math.trunc(answer * 65536)
    return answer

5. 결론

  • 구현