코딩테스트 연습 - [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)

+ Recent posts