-
[Python] programmers 뉴스 클러스터링알고리즘/문제풀이 2021. 12. 4. 23:36728x90
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. 결론
- 구현
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 백준 2580 스도쿠 (0) 2021.12.12 [Python] 백준 15656 N과 M (7) (0) 2021.12.12 [Python] programmers 입국심사 (0) 2021.12.04 [Python] programmers 교점에 별 만들기 (0) 2021.11.27 [Python] 백준 21921 블로그 (0) 2021.11.27