배고픈 개발자 이야기

[2018 kakao blind] 뉴스클러스터링 본문

알고리즘 문제/PROGRAMMERS

[2018 kakao blind] 뉴스클러스터링

이융희 2021. 8. 10. 13:16
728x90

중복되는 뉴스를 편리하게 제공하기 위해 뉴스기사 제목의 자카드 유사도를 검사하는 문제

 

뉴스제목을 부분집합으로 만들어 (교집합/합집합) * 65536의 값을 구하는 문제입니다.

 

주의점

- 대소문자를 구분하지 않는다.

- 영어 소문자 이외의 단어가 들어간 부분집합은 제외한다.

- 둘 다 공집합인 경우는 자카드 유사도를 1로 정의한다 (나눠지지 않으므로)

- intersection, union을 파이썬 set함수로 구하면 중복 부분집합이 제거되므로 직접 구현한다.

 

위의 주의점만 신경쓰면 된다.

 

def solution(str1, str2):
    answer = 0
    sub_str1, sub_str2 = list(), list()
    len_str1, len_str2 = len(str1), len(str2)
    for i in range(len_str1 - 1):
      a, b = str1[i].lower(), str1[i+1].lower()
      if 96 < ord(a) < 123 and 96 < ord(b) < 123:
        sub_str1.append(a + b) # 97~122

    for i in range(len_str2 - 1):
      a, b = str2[i].lower(), str2[i+1].lower()
      if 96 < ord(a) < 123 and 96 < ord(b) < 123:
        sub_str2.append(a + b) # 97~122

    union, intersection = len(sub_str1)+len(sub_str2), 0
    for sub_1 in sub_str1:
      for sub_2 in sub_str2:
        if sub_1 == sub_2:
          intersection += 1
          sub_str2.remove(sub_1)
          break

    union -= intersection
    if not union:
      return 65536
    answer= int((intersection / union) * 65536)
    return answer
Comments