본문 바로가기
알고리즘/카카오 기출문제

[파이썬🐍] 프로그래머스 : [1차] 뉴스 클러스터링

by 코딩개미뚠뚠 2021. 6. 29.
반응형

풀수록 어렵게 푸는 것 같아서 다른 사람들이 어떻게 푸나 찾아보다가 collections모듈을 이용한 풀이를 발견했다.

간단하게 잘 푼 풀이같다.

난 아직 collections에 익숙하지 않아서 바로 떠오르지가 않는다.

이 풀이를 반복하며 익숙해져야겠다.

import collections

def solution(str1, str2):
    arr1, arr2 = [],[]
    for i in range(max(len(str1), len(str2))-1):
        if (str1[i:i+2].isalpha()) and (len(str1[i:i+2]) == 2): arr1.append(str1[i:i+2].lower())
        if (str2[i:i+2].isalpha()) and (len(str2[i:i+2]) == 2): arr2.append(str2[i:i+2].lower())
    counter1, counter2 = collections.Counter(arr1), collections.Counter(arr2)
    intersection, union = counter1 & counter2, counter1 | counter2
    sum1 = sum(x[1] for x in intersection.items()) 
    sum2 = sum(x[1] for x in union.items())
    if sum2 == 0: 
        return 65536
    else: 
        return (65536*sum1) // sum2

<전체 코드>

 

 counter1, counter2 = collections.Counter(arr1), collections.Counter(arr2)

이 코드를 실행하면 딕셔너리 형태로 요소의 갯수가 많은 것부터 리스트형식으로 counter1, counter2에 저장된다.

 

sum1 = sum(x[1] for x in intersection.items()) 
sum2 = sum(x[1] for x in union.items())

.items() 함수는 키와 값을 한꺼번에 뽑아내는 것으로 x[1]은 요소가 아니라 요소의 갯수가 저장된 곳!

반응형

댓글