문제
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
풀이
- str1과 str2를 모두 소문자로 변경하고, 두 글자씩 끊어서 영문자인 것만 리스트로 만든다.
- 새롭게 만든 str1과 str2 둘 다 아무것도 존재하지 않는다면 65536을 return
- 각각의 배열을 set으로 감싸서 같은 값을 제거하고 &(교집합)과 |(합집합)을 사용해 합집합, 교집합을 만든다.
- 집합을 만드는 과정에서 교집합은 각 str1, str2 배열에서 존재하는 개수의 최솟값의 합을 ans1
- 각 str1, str2배열에서 합집합에 들어있는 원소들이 존재하는 개수의 최댓값의 합을 ans2로 지정하고 계산하여 반환
코드
def solution(str1, str2):
str1 = [str1[i:i + 2].lower() for i in range(len(str1) - 1) if str1[i:i + 2].isalpha()]
str2 = [str2[i:i + 2].lower() for i in range(len(str2) - 1) if str2[i:i + 2].isalpha()]
if not str1 and not str2:
return 65536
ans1 = sum([min(str1.count(i), str2.count(i)) for i in list(set(str1) & set(str2))])
ans2 = sum([max(str1.count(i), str2.count(i)) for i in list(set(str1) | set(str2))])
return int(ans1 / ans2 * 65536)
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv1. 성격 유형 검사하기 | Java | Python (0) | 2022.10.27 |
---|---|
[Programmers] Lv2. 게임 맵 최단거리 (0) | 2021.06.07 |
[Programmers] Lv2. 문자열 압축 (0) | 2021.05.24 |
[Programmers] Lv2. 더 맵게 (0) | 2021.05.24 |
[Programmers] Lv2. 오픈채팅방 (0) | 2021.05.24 |
댓글