[프로그래머스] [LV2] [1차] 뉴스 클러스터링
업데이트:
📚 [1차] 뉴스 클러스터링
링크📎 : https://programmers.co.kr/learn/challenges
난이도 ⭐️⭐️
📖 문제
📝 내 풀이
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
answer = (int)(65536 * Jaccard(splitString(str1.toUpperCase()), splitString(str2.toUpperCase())));
return answer;
}
public double Jaccard(List<String> a, List<String> b){
double d = 0.0;
int dset = 0;
int union = 0;
if(a.size()==0 && b.size()==0) d = 1.0;
else{
for(String s : b){
for(int i = 0; i < a.size(); i++){
if(a.get(i).equals(s)) {
a.remove(i);
dset++;
break;
}
}
}
union = b.size() + a.size();
d = (double)dset/union;
}
return d;
}
public List<String> splitString(String str){
List<String> temp = new ArrayList<String>();
for(int i = 0; i < str.length()-1; i++){
if((str.charAt(i)>'Z'||str.charAt(i)<'A')||(str.charAt(i+1)>'Z'||str.charAt(i+1)<'A')) continue;
temp.add(str.substring(i,i+2));
}
return temp;
}
}
👊🏻 전략
- 두가지로 나눠서 풀자
- 다중 집합을 만드는 것
- 영문자만
- 대문자로만
- 자카드 유사도를 측정하자
- 교집합은 중복이 가능함
끝-!
댓글남기기