[파이썬][프로그래머스] Lv. 2 [1차] 뉴스 클러스터링
from collections import Counter
def solution(str1, str2):
answer = 0
# 소문자화
str1 = str1.lower()
str2 = str2.lower()
str1_set2 = setString2(str1)
str2_set2 = setString2(str2)
similer_score = similer_count(str1_set2, str2_set2)
if len(str1_set2) > 0 or len(str2_set2) > 0:
zakad = (similer_score /(sum_count(str1_set2, str2_set2))) * 65536
else:
return 65536
# 내림
return int(zakad)
# 합집합
def sum_count(str1, str2):
score = 0
str1_counter = Counter(str1)
str2_counter = Counter(str2)
for i in str1_counter:
# 겹칠때 큰 수 +
if i in str2_counter:
if str1_counter[i] <= str2_counter[i]:
score += str2_counter[i]
else:
score += str1_counter[i]
# 겹치지 않을때 +
else:
score += str1_counter[i]
for j in str2_counter:
# 겹치지 않을때 +
if j not in str1_counter:
score += str2_counter[j]
return score
# 교집합
def similer_count(str1, str2):
score = 0
str1_counter = Counter(str1)
str2_counter = Counter(str2)
for i in str1_counter:
if i in str2_counter:
if str1_counter[i] <= str2_counter[i]:
score += str1_counter[i]
else:
score += str2_counter[i]
return score
# 집합 생성
def setString2(a):
temp = []
for i in range(len(a)):
# 2개의 집합이면
if len(a[i:i+2]) ==2:
# 소문자 알파벳이면
if ('a' <= a[i:i+2][0] <= "z") & ('a' <= a[i:i+2][1] <= "z"):
temp.append(a[i:i+2])
return temp