일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- backjoon
- divmod
- 백준
- 정렬
- 파이썬
- 재귀함수
- 프로그래머스
- 자바
- dfs
- 동적 계획법
- 수학
- programmers
- Combinations
- python
- DateTime
- 카카오
- Zip
- 다익스트라
- java
- lambda
- KAKAO BLIND RECRUITMENT
- 위클리 챌린지
- BFS
- 그리디
- Re
- 추석맞이 코딩챌린지
- Set
- 이분탐색
- 정규식
- heapq
Archives
- Today
- Total
상상쓰
[프로그래머스] [1차] 뉴스 클러스터링 본문
https://programmers.co.kr/learn/courses/30/lessons/17677
str1, str2 의 다중집합을 만든다. 이때 만들어지는 집합은 중복을 허용한다. 그래서 makeSet 에서 return 되는 값은 list 이다.
교집합과 합집합을 구한 뒤(set() 은 중복허용을 하지 않는다.) 중복을 허용하므로
교집합의 한 원소 e 는 list 인 s1 과 s2 에 들어있는 개수 중 가장 적은 개수만큼 교집합에 속한다.
반대로, 합집합의 한 원소 e는 list 인 s1 과 s2 에 들어있는 개수 중 가장 많은 개수만큼 합집합에 속한다.
즉, 교집합의 길이 = sum([min(s1.count(i), s2.count(i)) for i in (set(s1) & set(s2))])
합집합의 길이 = sum([max(s1.count(i), s2.count(i)) for i in (set(s1) | set(s2))])
를 이용하여 자카드 유사도에서 65336을 곱한 값을 출력한다. (단, U 가 0 이면 65336)
import re
def makeSet(string):
return list(filter(lambda x : re.search('[^a-z]', x) == None, [string.lower()[i:i+2] for i in range(len(string)-1)]))
def solution(str1, str2):
answer = 0
s1, s2 = makeSet(str1), makeSet(str2)
I = sum([min(s1.count(i), s2.count(i)) for i in (set(s1) & set(s2))])
U = sum([max(s1.count(i), s2.count(i)) for i in (set(s1) | set(s2))])
answer = int(I / U * 65536) if U != 0 else 65536
return answer
print(solution('FRANCE', 'french')) # 16384
'Coding Test' 카테고리의 다른 글
[프로그래머스] [1차] 셔틀버스 (0) | 2021.08.25 |
---|---|
[프로그래머스] 후보키 (0) | 2021.08.24 |
[프로그래머스] 4주차_직업군 추천하기 (0) | 2021.08.23 |
[프로그래머스] 실패율 (0) | 2021.08.22 |
[프로그래머스] 괄호 변환 (0) | 2021.08.21 |
Comments