알고리즘/문제풀이
[Python] programmers 뉴스 클러스터링
정찡이
2021. 12. 4. 23:36
728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17677
2. 문제 요약
두 문자열의 자카드 유사도를 출력
- 자카드 유사도: 교집합 크기 / 합집합 크기
3. 아이디어 정리
- 문자열 2개씩 끊기
- 교집합, 합집합 구하기
- 다중집합 구하기
- 교집합: 두 교집합에서 갯수 최소값
- 합집합: 두 교집합에서 갯수 최대값
4. 문제 풀이
4-1. 내 풀이
import math
def get_set(s):
list_ = list()
for c1, c2 in zip(s, s[1:]):
new = str(c1 + c2).lower()
if new.isalpha():
list_.append(new)
return list_
def solution(str1, str2):
# 1. 문자열 끊기
list_1 = get_set(str1)
list_2 = get_set(str2)
if len(list_1) == 0 and len(list_2) == 0:
answer = 1
else:
# 2. 교집합, 합집합 구하기
inter = set(list_1) & set(list_2)
uni = set(list_1) | set(list_2)
# 3. 다중집합 구하기
inter_list = [min(list_1.count(i), list_2.count(i)) for i in inter]
uni_list = [max(list_1.count(i), list_2.count(i)) for i in uni]
answer = sum(inter_list) / sum(uni_list)
answer = math.trunc(answer * 65536)
return answer
5. 결론
- 구현