-
[🤷♀️ 프로그래머스 Python] 뉴스 클러스터링Algorithm/1일 1코테 2020. 10. 27. 21:37반응형
📌문제
2018 KAKAO BLIND RECRUITMENT
[1차] 뉴스 클러스터링
programmers.co.kr/learn/courses/30/lessons/17677
📌
내 풀이
런타임에러로 장렬하게 실패!!!!😭😭😭😭
# 런타임 에러 - 53점 def solution(str1, str2): list1 = [] list2 = [] # 전처리(문자2개씩) list 만들기 for i in range(len(str1)-1): if str1[i:i+2].isalpha(): list1.add(str1[i:i+2].lower()) for i in range(len(str2)-1): if str2[i:i+2].isalpha(): list2.add(str1[i:i+2].lower()) # 만약 두개 다 0이면 return if len(list1) == 0 and len(list2) == 0: return 65536 # Count 하기 dict1 = {} dict2 = {} for i in list1: if i not in dict1: dict1[i] = 1 else: dict1[i] += 1 for i in list2: if i not in dict2: dict2[i] = 1 else: dict2[i] += 1 # 최종 dict1 for k, v in dict2.items(): if k not in dict1: dict1[k] = v else: a = dict1[k] dict1[k] = [a, v] hap = [] kyo = [] #합집합 교집합 만들기 for k, v in dict1.items(): if v == 1: hap.append(k) else: for _ in range(min(v)): kyo.append(k) for _ in range(max(v)): hap.append(k) answer = str(len(kyo)/len(hap) * 65536) return int(answer[:5])
그저 💩
📌
해답
AND와 OR로 기깔나게 해결,,,,
from collections import Counter as counter import re def solution(str1, str2): list1 = [ str1[i:i+2].lower() for i in range(len(str1)-1) if re.findall('[a-z]{2}', str1[i:i+2].lower()) ] list2 = [ str2[i:i+2].lower() for i in range(len(str2)-1) if re.findall('[a-z]{2}', str2[i:i+2].lower()) ] # 교집합 계산 intersection = sum((counter(list1) & counter(list2)).values()) # 합집합 계산 union = sum((counter(list1) | counter(list2)).values()) # 자카드 유사도 jaccard_sim = 1 if union == 0 else intersection / union return int(jaccard_sim * 65536)
import re import math def solution(str1, str2): str1 = [str1[i:i+2].lower() for i in range(0, len(str1)-1) if not re.findall('[^a-zA-Z]+', str1[i:i+2])] str2 = [str2[i:i+2].lower() for i in range(0, len(str2)-1) if not re.findall('[^a-zA-Z]+', str2[i:i+2])] gyo = set(str1) & set(str2) hap = set(str1) | set(str2) if len(hap) == 0 : return 65536 gyo_sum = sum([min(str1.count(gg), str2.count(gg)) for gg in gyo]) hap_sum = sum([max(str1.count(hh), str2.count(hh)) for hh in hap]) return math.floor((gyo_sum/hap_sum)*65536)
반응형'Algorithm > 1일 1코테' 카테고리의 다른 글
[💕 프로그래머스 Python] 더 맵게 (0) 2020.10.28 [😭 프로그래머스 Python] 셔틀버스 (0) 2020.10.28 [😭 LeetCode Python] 371. Sum of Two Integers (0) 2020.10.27 [💕 LeetCode Python] 191. Number of 1 Bits (0) 2020.10.27 [🤷♀️ LeetCode Python] 393. UTF-8 Validation (0) 2020.10.27