[프로그래머스] 뉴스 클러스터링

HL·2021년 3월 8일
0

프로그래머스

목록 보기
26/44

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/17677

문제 설명

  • 문자열을 두 글자씩 끊어서 다중 집합을 만든다
  • (교집합의 크기 / 합집합의 크기 * 65536) 리턴

풀이

  • 딕셔너리를 사용해 그대로 구현

코드

def solution(str1, str2):
    dict1 = get_dict(str1)
    dict2 = get_dict(str2)
    child = intersection(dict1, dict2)
    parent = union(dict1, dict2)
    if parent == 0:
        return 65536
    return int(child / parent * 65536)


def get_dict(string):
    dictt = dict()
    for i in range(len(string)-1):
        curr = string[i:i+2]
        if not curr.isalpha():
            continue
        curr = curr.upper()
        if curr not in dictt:
            dictt[curr] = 0
        dictt[curr] += 1
    return dictt


def intersection(dict1, dict2):
    count = 0
    for key in dict1:
        if key in dict2:
            count += min(dict1[key], dict2[key])
    return count


def union(dict1, dict2):
    count = 0
    # 교집합
    for key in dict1:
        if key in dict2:
            count += max(dict1[key], dict2[key])
    # 나머지
    for key in dict1:
        if key not in dict2:
            count += dict1[key]
    for key in dict2:
        if key not in dict1:
            count += dict2[key]
    return count
profile
Swift, iOS 앱 개발을 공부하고 있습니다

0개의 댓글