문제

문제

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

 

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

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

programmers.co.kr

 

 

처음 작성한 코드

def solution(str1, str2):
    import re
    list1 = [(str1[i:i+2]).lower() for i in range(len(str1)-1) if re.match('[a-zA-Z]{2}',str1[i:i+2])]
    list2 = [(str2[i:i+2]).lower() for i in range(len(str2)-1) if re.match('[a-zA-Z]{2}',str2[i:i+2])]
    gyo = 0
    if not list1 and not list2: return 65536
    for i in list1:
        if i in list2:
            gyo+=1
            list2[list2.index(i)] = '$$$'
    hap = len(list1+list2)-gyo
    return int((gyo/hap)*65536)

 

코드 리뷰 후

def solution(str1,str2):
    import re
    list1 = [(str1[i:i+2]).lower() for i in range(len(str1)-1) if re.match('[a-zA-Z]{2}',str1[i:i+2])]
    list2 = [(str2[i:i+2]).lower() for i in range(len(str2)-1) if re.match('[a-zA-Z]{2}',str2[i:i+2])]
    
    if not list1 and not list2: return 65536

    gyo = set(list1) & set(list2)
    hap = set(list1) | set(list2)

    _gyo = sum([min(list1.count(g), list2.count(g)) for g in gyo])
    _hap = sum([max(list1.count(h), list2.count(h)) for h in hap])
    return int(_gyo/_hap*65536)

 

깨달은 점

  • 정규식 좋다
  • 다중집합은 원소의 중복을 허용한다.. 그래서 set()을 사용하지 않고 코딩을 했는데 다른 사람들이 푼 방법을 보니까 기가막힌다! 진짜 어떻게 저런 생각을 하지..

'Programmers' 카테고리의 다른 글

[프로그래머스] 실패율  (0) 2021.01.13
[프로그래머스] 튜플  (0) 2021.01.11
[프로그래머스] H-Index  (0) 2021.01.09
[프로그래머스] 크레인 인형뽑기 게임  (0) 2021.01.07
[프로그래머스] 네트워크  (0) 2021.01.06