[ 문제 ]
https://school.programmers.co.kr/learn/courses/30/lessons/17677?language=java
[ 제출코드 ]
[ 풀이 ]
- 자카드 지수는 0과 1 사이의 값을 가지며, 두 집합이 동일하면 1의 값을 가지고, 공통의 원소가 하나도 없으면 0의 값을 가진다.
- 자카드 유사도(Jaccard similarity) = 교집합 / 합집합
str1 = handshake와 str2 = shake hands 풀이는 다음과 같습니다.
(대소문자는 무시한다고 적혀있기 때문에 모두 소문자로 놓고 풀었습니다.)
1. 부분집합을 구합니다.
str1의 부분집합 = { "ha", "an", "nd", "ds", "sh", "ha", "ak", "ke" }
str2의 부분집합 = { "sh", "ha", "ak", "ke", "e_", "_h", "ha", "an", "nd", "ds" }
2. 부분집합 중 조건에 맞지 않는 것은 제거합니다.
부분집합 중 영문이 아니라면 제외시키기 str2의 "e_"와 "_h"는 제거합니다.
str1의 부분집합 = { "ha", "an", "nd", "ds", "sh", "ha", "ak", "ke" } -> 8개
str2의 부분집합 = { "sh", "ha", "ak", "ke", "ha", "an", "nd", "ds" } -> 8개
3. 교집합과 합집합 개수를 구합니다.
합집합 개수는 (각 부분집합 개수의 합 - 교집합 개수) 로 구했습니다.
'Algorithm 문제풀기 > 프로그래머스' 카테고리의 다른 글
[JAVA] 전화번호 목록 ::: 해시 (0) | 2023.10.16 |
---|---|
[JAVA] 피로도 ::: 백트래킹 (0) | 2023.10.15 |
[JAVA] 신고 결과 받기 ::: 해시 자료구조 (0) | 2022.07.09 |
[JAVA] 단어변환 ::: DFS (0) | 2022.04.10 |
[JAVA] 오픈채팅방 (0) | 2021.08.21 |