[Programmers] P17677 뉴스 클러스터링
[Programmers] P17677 뉴스 클러스터링
Question
Language: Python
- 각각의 문자열을 2개의 문자 단위로 파싱해서 문자로만 이루어져있으면 value 배열에 추가
- value 배열을 set 연산을 통해 key set 저장
- 만약 2개의 key set이 모두 0이면 자카드 유사도 1
- key set을 이용해서 교집합 key와 합집합 key을 저장
- 자카드 유사도 계산
- 다중집합 자카드 유사도에 따라서, 교집합에서는 중복되는 key에 대해서는 min을, 합집합에서는 max을 적용해서 합산한다.
Solution
from math import floor
def solution(str1, str2):
answer = 0
str1_values=[]
str2_values=[]
str1=str1.lower()
str2=str2.lower()
#1
for i in range(len(str1)-1):
if "a"<=str1[i]<="z" and "a"<=str1[i+1]<="z":
str1_values.append(str1[i]+str1[i+1])
else:
continue
#1
for i in range(len(str2)-1):
if "a"<=str2[i]<="z" and "a"<=str2[i+1]<="z":
str2_values.append(str2[i]+str2[i+1])
else:
continue
#2
str1_keys=set(str1_values)
str2_keys=set(str2_values)
#3
if str1_keys==set() and str2_keys==set():
answer=1
else:
#4
intersection_keys=str1_keys.intersection(str2_keys)
union_keys=str1_keys.union(str2_keys)
intersection_value=0
union_value=0
#5
for key in intersection_keys:
intersection_value+=min(str1_values.count(key),str2_values.count(key))
for key in union_keys:
union_value+=max(str1_values.count(key),str2_values.count(key))
answer=intersection_value/union_value
answer=floor(answer*65536)
return answer
댓글남기기