[Programmers] - 뉴스 클러스터링 (Level 2)


2018 KAKAO BLIND RECRUITMENT [1차]
LEVEL : 2
문제링크

str1 = 'handshake'
str2 = 'shake hands'
def solution(str1, str2):

    import re
    p = re.compile('[^a-zA-Z]')

    #2글자씩 소문자로 묶고 영문자가 아닌것 제거
    token1 = [str1[i:i+2].lower() for i in range(len(str1)-1) if not p.search(str1[i:i+2])]
    token2 = [str2[i:i+2].lower() for i in range(len(str2)-1) if not p.search(str2[i:i+2])]

    #중복 원소에 대한 교집합
    intersect = 0
    for i in set(token1):
        if i in token2:
            intersect += min(token1.count(i), token2.count(i))

    #중복 원소에 대한 합집합
    union = len(token1) + len(token2) - intersect

    if union == 0:
        return 65536
    if intersect == 0:
        return 0
    else:
        #자카드 유사도 계산 후 정답 출력 형식으로 변환
        jakad = int(intersect/union*65536)
        return jakad
solution(str1, str2)
65536

Comments