[코딩테스트][Lv2]뉴스클러스터링(프로그래머스 카카오 기출)

건너별·2021년 11월 16일
0

algorithm

목록 보기
6/27

문제 풀기

집합 개념으로 비교적 수월하게 코딩했던 문제!

  • 중복집합에 대한 개념을 dictionary 개수와 key 교집합, 차집합, 합집합 그리고 min max로 해결하였다.
def solution(str1, str2):
    
    S_1 = [(str1[i] + str1[i+1]).lower()  for i in range(len(str1)-1) if (str1[i] + str1[i+1]).isalpha()]
    S_2 = [(str2[i] + str2[i+1]).lower()  for i in range(len(str2)-1) if (str2[i] + str2[i+1]).isalpha()]
    
    if not S_1 and not S_2:
        return 65536
    else:
        dic1,dic2={}, {}

        for i in set(S_1):
            dic1[i]=S_1.count(i)
        for i in set(S_2):
            dic2[i]=S_2.count(i)
        # print(dic1, dic2)
        cnt_in, cnt_out = 0, 0
        
        for key in set(S_1)|set(S_2):
            if key in set(S_1)&set(S_2):
                cnt_in+=min(dic1[key],dic2[key])
                cnt_out+=max(dic1[key],dic2[key])
            if key in set(S_1)-set(S_2) :
                cnt_out+=dic1[key]
            if key in set(S_2)-set(S_1):
                cnt_out+=dic2[key]
        print(cnt_in, cnt_out)
        return int(cnt_in/cnt_out *65536) 입력하세요
solution("france","FRENCH")
>>> 2 8 , 0.25* 65536

Counter 쓰면 굉장히 간단하다.

from collections import Counter

str1, str2 = "france", "FRENCH"
S_1 = [(str1[i] + str1[i+1]).lower()  for i in range(len(str1)-1) if (str1[i] + str1[i+1]).isalpha()]
S_2 = [(str2[i] + str2[i+1]).lower()  for i in range(len(str2)-1) if (str2[i] + str2[i+1]).isalpha()]

dic1 = Counter(S_1)
dic2 = Counter(S_2)
print(sum((dic1&dic2).values()))
print(sum((dic1|dic2).values()))
profile
romantic ai developer

0개의 댓글