Posts [알고리즘] 프로그래머스 - [1차] 뉴스 클러스터링
Post
Cancel

[알고리즘] 프로그래머스 - [1차] 뉴스 클러스터링


문제

[1차] 뉴스 클러스터링


접근

다중 집합을 어떻게 구현할지 막막했다.
set()을 이용하고 싶은데, set은 중복이 허용안되서 어떻게 할지 고민하다가,
그냥 하나씩 카운트해주기로 했다.
우선 주어지는 문자열을 2글자씩 짤라서 리스트로 저장한다.
그리고 집합을 이용해서 교집합과 합집합을 구한다.
이제 마지막으로 교집합과 합집합의 원소개수를 구해서 유사도 연산을 해야하는데,
중복된 값을 모두 제거해버렸으니, 하나씩 다시 계산한다.
각 리스트에 집합의 원소를 몇개씩 가지고 있는지 세서 더해준다.
합집합의 경우 더 많이 가지고 있는 쪽을 따르고, 교집합은 더 적게 가지고 있는 쪽을 따른다.


코드

  • 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import math
def solution(str1, str2):
    l1 = []
    l2 = []
    for i in range(len(str1)-1):
        if str1[i:i+2].isalpha():
            l1.append(str1[i:i+2].lower())
    for i in range(len(str2)-1):
        if str2[i:i+2].isalpha():
            l2.append(str2[i:i+2].lower())
    inter = set(l1) & set(l2)
    union = set(l1) | set(l2)
    if len(union) == 0:
        return 65536
    inter_sum = 0
    union_sum = 0
    for item in union:
        union_sum += max(l1.count(item), l2.count(item))
    for item in inter:
        inter_sum += min(l1.count(item), l2.count(item))
    return math.trunc((inter_sum/union_sum)*65536)


This post is licensed under CC BY 4.0 by the author.