Python/CoTe

[programmers] 뉴스 클러스터링 - Counter

joannekim0420 2022. 3. 12. 16:34
728x90

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

 

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

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

programmers.co.kr

 

 

 

첫 코드

from collections import Counter

def solution(str1, str2):
    string1, string2 = [] ,[]
    
    string = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
             'n','o','p','q','r','s','t','u','v','w','x','y','z']
    
    for i in range(len(str1)-1):
        if str1[i].lower() in string and str1[i+1].lower() in string:
            string1.append(str1[i].lower()+str1[i+1].lower())

    for i in range(len(str2)-1):
        if str2[i].lower() in string and str2[i+1].lower() in string:
            string2.append(str2[i].lower()+str2[i+1].lower())

    
    inter = set(string1)&set(string2)
    untion = set(string2+string1)
    
    if len(inter) == 0 and len(union) == 0:
        return 1*65536
    else:
        return int((len(inter)/len(union))*65536)

집합으로는 문제에 나와 있는 다중집합 허용 조건을 만족하지 못한다.

코드를 이리저리 수정해보아도 테스트 케이스는 통과하지만 제출 후 실패하는 케이스들이 많다.

중복되는 요소에 대해서는 고유번호를 추가적으로 더 붙이는 방법도 생각했지만 이것도 실패..

 

 

 

수정 후 코드 

집합 set 이 아닌 Counter 사용

from collections import Counter

def solution(str1, str2):
    string1, string2 = [] ,[]
    
    string = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
             'n','o','p','q','r','s','t','u','v','w','x','y','z']
    
    for i in range(len(str1)-1):
        if str1[i].lower() in string and str1[i+1].lower() in string:
            string1.append(str1[i].lower()+str1[i+1].lower())

    for i in range(len(str2)-1):
        if str2[i].lower() in string and str2[i+1].lower() in string:
            string2.append(str2[i].lower()+str2[i+1].lower())

    
    inter = list((Counter(string1) & Counter(string2)).elements())
    union = list((Counter(string1) | Counter(string2)).elements())
    
    if len(inter) == 0 and len(union) == 0:
        return 1*65536
    else:
        return int((len(inter)/len(union))*65536)

 

Counter 에 사용한 건 이번이 처음!

https://dongdongfather.tistory.com/70

 

[파이썬 기초] Counter를 이용한 항목 계산

파이썬에서 항목의 개수를 셀때 사용하는 클래스로 Counter라는게 있다. 리스트나 셋을 인자로 넘기면 각 항목을 키로 해서 개수를 알려준다. 기본사용법은 이렇다. >>> from collections import Counter >>>

dongdongfather.tistory.com

의 글을 참고했다.