CODING TEST/Programmers
프로그래머스 카카오블라인드 1차 뉴스클러스터링 (python)
eyebrow93
2021. 6. 13. 17:58
코딩테스트 연습 - [1차] 뉴스 클러스터링 | 프로그래머스 (programmers.co.kr)
일단 나는 문자열을 토대로 str1 과 str2 의 딕셔너리를 만들어주고,
이후, 교집합과, 합집합을 계산해준다음
최종적으로, 65536 계산을 통해 return하는 형식으로 풀었다.
import re
# str1,str2,answer='FRANCE,french,16384'.split(',')
# str1,str2,answer='handshake,shake hands,65536'.split(',')
# str1,str2,answer='aa1+aa2,AAAA12,43690'.split(',')
# str1,str2,answer='E=M*C^2,e=m*c^2,65536'.split(',')
def mkstdic(str):
dic={}
for i in range(len(str)-1):
now = str[i]+str[i+1]
now = re.sub('[^a-z]','',now)
if len(now)<2: continue
if dic.get(now):
dic[now]+=1
else:
dic[now]=1
return dic
def solution(str1,str2):
a,b = mkstdic(str1.lower()), mkstdic(str2.lower())
kyo={}
hap={}
for ak in a:
if ak in b:
kyo[ak] = min(a[ak],b[ak])
hap[ak] = max(a[ak],b[ak])
else:
hap[ak] = a[ak]
for bk in b:
if bk in a: continue
else: hap[bk] = b[bk]
oper = sum(map(lambda x : kyo[x], kyo))
div = sum(map(lambda x : hap[x], hap))
if div == 0 : return 65536
return int((oper/div)*65536)
solution(str1,str2)