Algorithm/Programmers

[Programmers] Lv2. [1차] 뉴스 클러스터링

by somida 2021. 5. 24.

문제

바로가기

 

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

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

programmers.co.kr

 

풀이

  • str1과 str2를 모두 소문자로 변경하고, 두 글자씩 끊어서 영문자인 것만 리스트로 만든다.
  • 새롭게 만든 str1과 str2 둘 다 아무것도 존재하지 않는다면 65536을 return
  • 각각의 배열을 set으로 감싸서 같은 값을 제거하고 &(교집합)과 |(합집합)을 사용해 합집합, 교집합을 만든다.
  • 집합을 만드는 과정에서 교집합은 각 str1, str2 배열에서 존재하는 개수의 최솟값의 합을 ans1
  • 각 str1, str2배열에서 합집합에 들어있는 원소들이 존재하는 개수의 최댓값의 합을 ans2로 지정하고 계산하여 반환

 

코드

def solution(str1, str2):
    str1 = [str1[i:i + 2].lower() for i in range(len(str1) - 1) if str1[i:i + 2].isalpha()]
    str2 = [str2[i:i + 2].lower() for i in range(len(str2) - 1) if str2[i:i + 2].isalpha()]

    if not str1 and not str2:
        return 65536
    ans1 = sum([min(str1.count(i), str2.count(i)) for i in list(set(str1) & set(str2))])
    ans2 = sum([max(str1.count(i), str2.count(i)) for i in list(set(str1) | set(str2))])
    return int(ans1 / ans2 * 65536)
반응형

댓글