코딩테스트

[프로그래머스][KAKAO_BLIND][2018] 뉴스 클러스터링

pythaac 2021. 9. 1. 05:35
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

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

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

programmers.co.kr

 

내가 작성한 코드

from collections import Counter
import re

def solution(str1, str2):
    s = 0
    joint = 0
    str1 = str1.lower()
    str1 = [str1[i:i+2] for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
    str2 = str2.lower()
    str2 = [str2[i:i+2] for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
    cnt1 = Counter(str1)
    cnt2 = Counter(str2)
    for k, v in cnt1.items():
        if k in cnt2:
            joint += min(v, cnt2[k])
            s += max(v, cnt2[k])
    s += sum(v for k, v in cnt1.items() if k not in cnt2)
    s += sum(v for k, v in cnt2.items() if k not in cnt1)

    if joint == 0 and s == 0:
        joint = 1
        s = 1

    return int(joint / s * 65536)
  • 문자열
    • 문자열을 2개씩 자르기
    • lower()로 소문자 변형
    • isalpha()가 true인 쌍만 확인
  • 집합
    • 중복값 고려시 Counter 또는 정렬 사용
    • Counter에서 key 중복시
      - 교집합은 둘 중 min
      - 합집합은 둘 중 max
    • 중복되지 않는 key에 대해 합집합에 값 추가

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • isalpha()와 lower()등 문자열에 유용한 메서드
  • 중복을 고려한 교집합/합집합시 복잡해짐을 유의