반응형
카카오 2018 블라인드 코딩테스트 문제입니다.
문제
문제는 입력으로 들어오는 두 문자열에 대해 자카드 유사도 (Jaccard Similaraity)를 계산하는 문제입니다.
1. str1 = 'FRANCE', str2 = 'french' => 16384
2. str1 = 'handshake', str2 = 'shake hands' => 65536
3. str1 = 'aa1+aa2', str2 = 'AAAA12' => 43690
4. str1 = 'E=M*C^2', str2 = 'e=m*c^2' => 65536
풀이
먼저, 자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나로 집합 $A,B$에 대해서 $J(A,B) = INTERSECTION(A,B) / UNION(A,B)$ 로 정의됩니다. 각 집합의 원소가 중복된 다중집합에 대해서도 적용될 수 있습니다. 예를 들어, 집합 $A$는 원소 1을 3개 가지고 있고 집합 $B$는 원소 1을 5개 가지고 있다면 교집합은 min(3,5)인 3, 합집합은 max(3,5)인 5만큼 원소 1을 가지게 됩니다.
풀이는 생각보다 간단합니다. 문자열에 대해 전처리를 수행하고 collections 모듈의 Counter를 이용해 교집합, 합집합을 수행하면 될 것 같습니다.
kaggle.com의 notebook으로 작성한 풀이는 다음과 같습니다.
홍머스 정리
- 자카드 유사도
- Counter 교집합, 합집합
반응형
'Computer > Coding Test' 카테고리의 다른 글
코딩테스트 문제 (18) - 후보키 (0) | 2021.02.28 |
---|---|
코딩테스트 문제 (17) - 실패율 (0) | 2021.02.27 |
코딩테스트 문제 (15) - 캐시 (0) | 2021.02.26 |
코딩테스트 문제 (14) - 다트 게임 (0) | 2021.02.25 |
코딩테스트 문제 (13) - 부분 집합 (0) | 2021.02.25 |