틀렸던 코드
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)