📖  문제

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

 

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

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

programmers.co.kr

 

💻  코드

from collections import defaultdict


def parse_and_store(_str):
    _set = set()
    _dic = defaultdict(int)
    for i in range(len(_str) - 1):
        s = _str[i:i + 2]
        if s.isalpha():
            _set.add(s.lower())
            _dic[s.lower()] += 1
    return _set, _dic


def solution(str1, str2):
    set1, dic1 = parse_and_store(str1)
    set2, dic2 = parse_and_store(str2)
    if len(set1) == len(set2) == 0:
        jac = 1
    else:
        jac = sum(min(dic1[s], dic2[s]) for s in (set1 & set2)) / sum(max(dic1[s], dic2[s]) for s in (set1 | set2))
    return int(jac * 65536)

 

🙌  한마디

구현(Implementation) 유형이었고, 두 집합의 교집합과 합집합을 구함과 동시에 중복되는 원소들의 개수를 고려해야했다. 교집합과 합집합을 구하는데 set을 이용했고, 중복되는 원소들은 dictionary에 저장했다. 소수점 버림은 int()를 사용했다. math.trunc()와 int()는 둘 다 소수점을 버리며, 동일하게 동작한다. math.floor은 소수점을 반올림하므로 음수에서 math.trunc,int()와 다르게 동작한다. 이 점에 유의하자. 그럼에도 해당 문제는 math.floor, math.trunc(=int()) 모두 통과가 된다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기