자카드 유사도 구하기.
str1 | str2 | answer |
---|---|---|
FRANCE | french | 16384 |
handshake | shake hands | 65536 |
aa1+aa2 | AAAA12 | 43690 |
E=M*C^2 | e=m*c^2 | 65536 |
- str1, str2를 모두 대문자로 만들고 두글자씩 알파벳만 끊어서 리스트에 담는다.
- 다중집합이 허용되므로 set()자료형을 쓰지 않고,
for문과 if문을 활용하여 교집합의 개수를 구한다.
이 때 공통으로 속하는 원소는 크기가 더 큰 집합에서 삭제한다.- 교집합을 제거한 집합과 나머지 집합을 합쳐서 합집합의 개수를 구한다.
- 자카드 유사도를 구한다.
- 집합의 크기가 더 큰 집합에서 교집합을 삭제해야한다.
- 원소를 삭제할 집합이 아닌 집합의 원소를 기준으로 for문을 돌려야한다.
def set_ele(string):
string = string.upper()
ans = []
for i in range(len(string)-1):
s = string[i]+string[i+1]
if s.isalpha():
ans.append(s)
return ans
def find_rel(A, B):
# 교집합
if len(A) > len(B):
inter = [A.remove(x) for x in B if x in A]
else:
inter = [B.remove(x) for x in A if x in B]
a = len(inter)
b = len(A+B)
return a, b
def solution(str1, str2):
# 두 글자씩 끊기
string1 = set_ele(str1)
string2 = set_ele(str2)
# 교집합 개수, 합집합 개수 구하기
a, b = find_rel(string1, string2)
if a==0 or b==0:
return 65536
else:
return int(a*65536/b)