DevKim

[Python] 2018 카카오 BLIND RECRUITMENT- 뉴스 클러스터링 본문

알고리즘 PS

[Python] 2018 카카오 BLIND RECRUITMENT- 뉴스 클러스터링

on_doing 2021. 2. 24. 18:17
728x90

programmers.co.kr/learn/courses/30/lessons/17677#

 

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

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

programmers.co.kr

[ 알고리즘 ]

구현

 

[문제 접근]

다중 집합에 대해 확장할 수 있다는 조건으로,

단순히 파이썬의 내장 함수 set을 사용하여 교집합과 합집합을 구할 수 있는 문제가 아니었다.

또한 영문자외의 다른 문자뒤나, 앞에 오는 문자들은 함수에 들어가지 않는다는 점을 고려해야했다.

 

입력 : AA_bb_aa_AA,BBB

출력 : 13107

 

이 반례가 오류를 고치는데에 도움이 되었다.

 

쉬운 문제 같아서 빠르게 푸느라 코드가 잘 정리되진 않았음

 

[코드]

import math
def solution(str1, str2):
    answer = 0
    str1=str1.lower()
    str2=str2.lower()
    
    if len(str1)==0 or len(str2)==0 or str1==str2:
        return 65536
    
    List1=[]
    for i in range(len(str1)-1):
        if str1[i].isalpha() and str1[i+1].isalpha():
            List1.append(str1[i:i+2])
        
    List2=[]
    for i in range(len(str2)-1):
        if str2[i].isalpha() and str2[i+1].isalpha():
            List2.append(str2[i:i+2])
            
    
    set1=set(List1)
    set2=set(List2)
    
    cnt1=0
    cnt2=0
    
    # 교집합
    sub=set1&set2
    for i in sub: # 중복확인
        cnt1+=min(List1.count(i),List2.count(i))
    
    # 합집합   
    for i in List1:
        if i not in sub:
            cnt2+=1
    
    for i in List2:
        if i not in sub:
            cnt2+=1
    
    for i in sub:
        cnt2+=max(List1.count(i),List2.count(i))

        
    if cnt2==0:
        return 65536
    
    answer=math.floor((cnt1/cnt2)*65536)
    
    
    
    return answer

 

728x90
Comments