본문 바로가기
알고리즘-python/Programmers 문제

[프로그래머스/2단계/파이썬(Python3)] 뉴스 클러스터링

by 빅데이터1020 2021. 6. 25.
SMALL

2018 카카오 블라인드 채용 코딩테스트 입니다.

문제 출처

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

 

풀이코드

import re
def solution(str1, str2):
    str1, str2, str_1, str_2 = str1.lower(), str2.lower(), [], []

    for i in range(len(str1)-1):
        temp = str1[i]+str1[i+1]
        temp=re.sub('[^a-z]','',temp)
        if len(temp)==2: str_1.append(temp)

    for i in range(len(str2)-1):
        temp = str2[i]+str2[i+1]
        temp=re.sub('[^a-z]','',temp)
        if len(temp)==2: str_2.append(temp)
                                
    # 다중집합의 합집합 구하기
    str_1_c, Union = str_1.copy(), str_1.copy()
    for i in str_2:
        if i not in str_1_c:
            Union.append(i)
        else:
            str_1_c.remove(i)
        
    # 다중집합의 교집합 구하기
    Int=[]
    for i in str_2:
        if i in str_1: 
            str_1.remove(i)
            Int.append(i)
            
    if len(Union) == 0: answer = 65536
    else: answer = int(len(Int)/(len(Union)) * 65536)

    return answer

 

지난 번에 써먹었던 정규표현식으로 문자열 정리해줬습니다.

다중집합이 아니라면 set()함수로 교집합과 차집합 구할 수 있었을 것 같아요.

 

다중집합에서 합집합과 교집합을 구하려면 쌍둥이(?) 리스트를 만들어서 하나씩 비교해가면 됩니다!

LIST