프로그래머스|뉴스 클러스터링

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
1/136

문제설명

두 개의 문자열을 입력받고 그 문자열들의 자카드 유사도를 구하는 문제입니다. 이때 영어 이외의 문자가 포함된 문자열들은 취급하지 않고 대소문자는 구분없이 처리합니다.

작동 순서

  1. 두 문자열들을 입력받습니다.

  2. 두 문자열들을 연속된 알파벳들로만 구성해서 분할합니다.

  3. 분할된 두 문자열들의 분할 개수로 전체집합의 크기를 구합니다.

  4. 두 문자열들의 부분집합들을 비교하며 교집합의 개수를 확인합니다.

  5. 교집합의 개수를 합집합의 개수(전체집합의 개수-교집합의 개수)로 나눠줍니다.

  6. 위에서 구한값에 65536을 곱한뒤 정수로 변환해서 출력합니다.

소스코드

import re
def solution(str1, str2):
    intersectionNum = 0
    set1=getTrimmedString(str1)
    set2=getTrimmedString(str2)
    
    universalSetNum=len(set1)+len(set2)
    
    for i in range(len(set1)):
        for j in range(len(set2)):
            if set1[i]==set2[j]:
                intersectionNum+=1
                del set2[j]
                break
    
    if universalSetNum==0:
        answer=1
    else:
        answer=intersectionNum/(universalSetNum-intersectionNum)
    answer*=65536
    
    return int(answer)

def getTrimmedString(string):
    s=[]
    for i in range(len(string)-1):
        text = re.sub('[^a-zA-Z]',' ',string[i:i+2]).strip()
        if len(text)==2:
            s.append(text.upper())
    return s

후기
자카드 유사도라는 용어 자체를 처음봐서 좀 많이 헤맸네요. 그리고 isalpha()라는 함수를 쓰면 쉽게 해결할수 있는 걸 복잡하게 풀어놨네요... 아직도 갈길이 먼 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글