일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- heapq
- Set
- dfs
- python
- 정규식
- 추석맞이 코딩챌린지
- 재귀함수
- programmers
- 수학
- 위클리 챌린지
- 백준
- divmod
- 프로그래머스
- 정렬
- Re
- KAKAO BLIND RECRUITMENT
- 다익스트라
- BFS
- Combinations
- 그리디
- backjoon
- Zip
- 자바
- 파이썬
- 카카오
- java
- 동적 계획법
- lambda
- 이분탐색
- DateTime
Archives
- Today
- Total
상상쓰
[프로그래머스] [1차] 뉴스 클러스터링 본문
https://programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
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