[프로그래머스/파이썬] Level 2 뉴스 클러스트링

bye9·2021년 4월 23일
0

알고리즘(코테)

목록 보기
129/130
post-custom-banner

문제풀이

틀렸던 코드

import math 

def solution(str1, str2):
    str1=str1.lower()
    str2=str2.lower()
    
    def make(string):
        string_array=[]
        word_cnt=0
        temp=""
        for i in range(len(string)):
            temp+=string[i]
            word_cnt+=1
            if word_cnt==2:
                if temp.isalpha()==True:
                    string_array.append(temp)
                word_cnt=1
                temp=temp[-1]
            else:
                continue
        return string_array
    
    str1_array=make(str1)
    str2_array=make(str2)
    print(str1_array)
    print(str2_array)
    
    a=[]
    b=[]
    def make2(m,n):
        for i in m:
            if i not in b:
                if i in n:
                    min_num=min(m.count(i),n.count(i))
                    max_num=max(m.count(i),n.count(i))
                    for k in range(min_num):
                        a.append(i)
                    for k in range(max_num):
                        b.append(i)
                else:
                    b.append(i)
                    
    make2(str1_array,str2_array)
    make2(str2_array,str1_array)
    print(a,b)
    
    if len(a)==0 and len(b)==0:
        result=1
    else:
        result=len(a)/len(b)
        
    return math.trunc(result*65536)

테케 7,9,10,11에서 틀렸다.
해당 코드에서는 list1={1,2,4,4,4} , list2={4,4,5,6,7,8,8}의 경우
합집합에서 8을 두개를 포함해야하는데 8이 한번들어가면 넘어가다보니 계산오류가 있었다.


ex) "AAbbaa_AA", " BBB"
make함수는 문자열을 두 글자씩 끊어서 다중집합을 만드는 함수이다.
str1_array=['aa', 'ab', 'bb', 'ba', 'aa', 'aa']
str2_array=['bb', 'bb']
이때 알파벳이 아닌 문자가 포함된 원소는 포함시키지 않는다.

그리고 각 원소가 해당 리스트에만 있는 경우면 합집합b에 추가하고, 두 리스트에 포함된 경우면 원소의 중복을 허용하는 다중집합의 확장을 거쳐 min만큼 교집합a, max만큼 합집합b에 추가한다.
a=['bb']
b=['aa', 'ab', 'bb', 'bb', 'ba', 'aa', 'aa']

소스코드

def solution(str1, str2):
    str1=str1.lower()
    str2=str2.lower()
    
    def make(string):
        string_array=[]
        word_cnt=0
        temp=""
        for i in range(len(string)):
            temp+=string[i]
            word_cnt+=1
            if word_cnt==2:
                if temp.isalpha()==True:
                    string_array.append(temp)
                word_cnt=1
                temp=temp[-1]
            else:
                continue
        return string_array
    
    str1_array=make(str1)
    str2_array=make(str2)

    a=[]
    b=[]
    for i in str1_array:
        if i not in str2_array:
            b.append(i)
        elif i not in a:
            min_num=min(str1_array.count(i),str2_array.count(i))
            max_num=max(str1_array.count(i),str2_array.count(i))
            for k in range(min_num):
                a.append(i)
            for k in range(max_num):
                b.append(i)
    
    for i in str2_array:
        if i not in str1_array:
            b.append(i)
                
    if len(a)==0 and len(b)==0:
        result=1
    else:
        result=len(a)/len(b)
        
    return int(result*65536)
post-custom-banner

0개의 댓글