[프로그래머스] 뉴스 클러스터링, 파이썬
💡 문제 해결 아이디어
내가 생각한 아이디어
- 일단 2글자씩 잘라가면서, 정규표현식을 이용해 알파벳으로만 이루어져 있는지 확인한다
- lower(또는 upper)함수를 적용하여, 소문자로 변경하여 대문자와 소문자의 차이를 제거한다
- set()를 이용해서 교집합과 합집합을 계산한다
- set()를 이용할 경우, 중복되는 원소는 하나만 남게 되므로, 중복되는 원소의 개수는 list의 count 함수를 통해 계산!
- 교집합의 경우 count 값 중 더 작은 값을, 합집합의 경우에는 더 큰 값을 선택한다.
💻 작성된 코드(수정)
import re
def solution(str1, str2):
ls1 = [str1[i:i+2].lower() for i in range(len(str1)-1) if bool(re.match('[A-Za-z]{2}', str1[i:i+2]))]
ls2 = [str2[i:i+2].lower() for i in range(len(str2)-1) if bool(re.match('[A-Za-z]{2}', str2[i:i+2])) ]
intersec, union = set(ls1).intersection(set(ls2)), set(ls1).union(set(ls2))
up = sum([min(ls1.count(word), ls2.count(word)) for word in list(intersec)])
down = sum([max(ls1.count(word), ls2.count(word)) for word in list(union)])
if not down:
up, down = 1, 1
return int(up/down * 65536)