728x90
반응형
문제:
풀이방법:
입력으로 들어오는 값들을 다중집합으로 만들어야 한다. 소문자와 대문자의 구분이 필요 없으므로 소문자로 전부 바꾸고 두개씩 끊어가면서 특수문자가 있는지 파악하고 각 배열에 담는다.
summation이라는 두 배열의 길이의 합을 구하고 이를 교집합과 뺌으로써 합집합의 크기를 구할 것이다. summation은 공통된 원소를 두 개씩 가지고 있는 것이기 때문이다.
반복문을 사용해서 공통된 원소가 있을 때마다 intersect를 하나씩 증가시킨다.
이 두 변수로 자카드 유사도는 다음과 같이 구한다. int(intersect/(summation-intersect)*65536) 이 값을 구하면 답을 얻을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def solution(str1,str2):
str1=str1.lower()
str2=str2.lower()
str1_set=[]
str2_set=[]
for i in range(len(str1)-1):
if (str1[i]+str1[i+1]).isalpha():
str1_set.append(str1[i]+str1[i+1])
for i in range(len(str2)-1):
if (str2[i]+str2[i+1]).isalpha():
str2_set.append(str2[i]+str2[i+1])
summation=len(str1_set)+len(str2_set)
intersect=0
for i in str2_set:
if i in str1_set:
str1_set.remove(i)
intersect+=1
if summation==0:
return 65536
else:
return int(intersect/(summation-intersect)*65536)
|
cs |
문제링크:
https://programmers.co.kr/learn/courses/30/lessons/17677
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[Programmers]2017 Kakao.비밀지도 (0) | 2019.09.28 |
---|---|
[Programmers]2017 Kakao.캐시 (0) | 2019.09.27 |
[BOJ]1987. 알파벳 (0) | 2019.09.25 |
[BOJ]1759. 암호 만들기 (0) | 2019.09.24 |
[BOJ]14889. 스타트와 링크 (0) | 2019.09.23 |