본문 바로가기
코딩 테스트

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

by zoodi 2021. 3. 24.
728x90

🍒문제

programmers.co.kr/learn/courses/30/lessons/17677?language=python3

 

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

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

programmers.co.kr

🍒풀이

1. string 을 모두 대문자 or 소문자로 변환 후

2. 2개씩 단어를 짤라서 리스트에 저장한다. (str1 -> a 리스트, str2 -> b 리스트에 저장)

3. 두 리스트의 교집합과 합집합을 구한 뒤

4. 교집합 원소 중 count 함수를 사용해서 둘 중 (a, b) 작은 값을

5. 합집합 원소 중 count 함수를 사용해서 둘 중 큰 값을 구한다.

6. union_sum = 0 이면 65536을 리턴하고

7. 0이 아니면 answer * 65536 을 int 형으로 리턴한다.

 

🍒코드

def make_list(s_str):
    li = []
    for i in range(len(s_str)-1):
        tmp = s_str[i:i+2]
        if tmp.isalpha() == False:
            continue
        li.append(tmp)
    return li
    
    
def solution(str1, str2):
    answer = 1.0
    
    a = make_list(str1.upper())
    b = make_list(str2.upper())
    
    intersect = set(a) & set(b)
    union = set(a) | set(b)
    
    inter_sum = sum([min(a.count(x), b.count(x)) for x in intersect])
    union_sum = sum([max(a.count(x), b.count(x)) for x in union])
    if union_sum == 0:
        return 65536
    
    answer = inter_sum / union_sum
    answer = int(answer * 65536)
    return answer

 

728x90

댓글