[프로그래머스/Level2] 뉴스 클러스터링(Python)

SeokHyun·2022년 7월 11일
0

프로그래머스

목록 보기
20/32

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17677

문제 접근

핵심

  1. 교집합 검사하는 로직을 세울 수 있는가
  2. 2글자씩 자른 문자열에서 특문자 검출

소스 코드

from itertools import combinations
import re

def solution(str1, str2):
    str1 = str1.lower()
    str2 = str2.lower()
    
    pattern = re.compile("[a-z]{2,}")
    
    arr1 = list(map(lambda x: str1[x:x+2], range(0, len(str1) - 1)))
    arr2 = list(map(lambda x: str2[x:x+2], range(0, len(str2) - 1)))
    arr1 = list(filter(lambda x: pattern.match(x) != None, arr1))
    arr2 = list(filter(lambda x: pattern.match(x) != None, arr2))
    
    crossCount = countCrossValue(arr1, arr2.copy())
    sumCount = len(arr1) + len(arr2) - crossCount
    
    similarFactor = 1 if sumCount == 0 else crossCount / sumCount
     
    return int(similarFactor * 65536)
    
def countCrossValue(arr1, arr2):
    cross = []
    
    for i in arr1:
        if i in arr2:
            arr2.remove(i)
            cross.append(i)
    
    return len(cross)
profile
SI를 넘어 백엔드 엔지니어를 향하여

0개의 댓글