본문 바로가기
Algorithm 문제풀기/프로그래머스

[JAVA] 뉴스 클러스터링

by 내일이야 2023. 10. 15.

[ 문제 ]

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. 교집합과 합집합 개수를 구합니다.

합집합 개수는 (각 부분집합 개수의 합 - 교집합 개수) 로 구했습니다.