728x90

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

 

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

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

programmers.co.kr

출처 : 프로그래머스


from collections import Counter
import math
def solution(str1, str2):
    answer = 0
    # 모두 대문자로 통일
    str1 = str1.upper()
    str2 = str2.upper()
    print(str1,str2)
    
    # 문자열로만 구성된 2글자 배열에 삽입
    tmp1 = []
    tmp2 = []
    for s1 in range(len(str1)-1):
        if str1[s1].isalpha() and str1[s1+1].isalpha():
            tmp1.append(str1[s1]+str1[s1+1])
    for s2 in range(len(str2)-1):
        if str2[s2].isalpha() and str2[s2+1].isalpha():
            tmp2.append(str2[s2]+str2[s2+1])

    # Counter 객체
    counter1 = Counter(tmp1)
    counter2 = Counter(tmp2)
    
    # 교집합과 합집합
    interset_set = list((counter1 & counter2).elements())
    union_set = list((counter1 | counter2).elements())
    
    if len(union_set) == 0:
        return 65536
    
    return math.floor((len(interset_set) /len(union_set))*65536)

풀이

대소문자 구분을 하지 않으니 모두 대문자로 통일시켜서 시작했다.

또한, 2개씩 문자열을 나눠서 배열에 넣을 때, 쪼갠 2개가 문자열이 맞는지 isalpha()로 확인해서 배열에 넣었다.

그리고 Counter() 를 사용해 객체를 만들어냈다.

Counter()는 set()처럼 교집합 & , 합집합 | 을 만들수 있다.

Counter().elements() 를 사용하면 요소(값) 만 뽑을 수 있다.

+ Recent posts