처음에는 정규표현식을 이용하여 영어 알파벳만 골라냈다.
그 후 for문을 이용하여 union 및 intersection을 구하였다.
import re
def solution(str1, str2):
p = re.compile('^[a-zA-Z]*$')
answer = 65536
a = list()
b = list()
for i in range(len(str1) - 1):
if p.match(str1[i:i + 2]):
a.append(str1[i:i + 2].lower())
for i in range(len(str2) - 1):
if p.match(str2[i:i + 2]):
b.append(str2[i:i + 2].lower())
a1 = a.copy()
union = a.copy()
for i in b:
union.append(i) if i not in a1 else a1.remove(i)
inter = []
for i in b:
if i in a:
inter.append(i)
a.remove(i)
if not len(inter) and not len(union):
pass
else:
answer = int(len(inter) / len(union) * 65536)
return answer
더 좋은 방법을 찾았다!
isalpha()를 이용하여 알파벳을 찾았다.
교집합과 합집합을 구하여
교집합의 합은 교집합의 원소를 가져와 count를 사용하여 작은 갯수를 리스트에 넣어준다.
합집합도 동일하게 했다.
def solution(str1, str2):
a1 = [str1[i:i+2].lower() for i in range(len(str1) - 1) if str1[i:i+2].isalpha()]
a2 = [str2[i:i+2].lower() for i in range(len(str2) - 1) if str2[i:i+2].isalpha()]
union = set(a1) | set(a2)
inter = set(a1) & set(a2)
if not len(union):
return 65536
s1 = sum([min(a1.count(i), a2.count(i)) for i in inter])
s2 = sum([max(a1.count(i), a2.count(i)) for i in union])
return int(s1 / s2 * 65536)