공부/프로그래머스
[프로그래머스] [1차] 뉴스 클러스터링 - Java
빈v
2024. 7. 15. 22:32
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 [1차] 뉴스 클러스터링 자바 풀이
난이도: Lv2
풀이
알파벳으로만 이루어져 있는 원소를 뽑아내어 list에 저장한다.
그 후 교집합, 합집합을 찾는다.
원소가 없는 경우 1로 지정하고, 있는 경우 교집합/합집합을 하여 자카드 유사도를 구한다.
코드
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1=str1.toLowerCase();
str2=str2.toLowerCase();
ArrayList<String> list1=new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
ArrayList<String> union = new ArrayList<>();
ArrayList<String> intersection = new ArrayList<>();
for(int i=0;i<str1.length()-1;i++){
char a = str1.charAt(i);
char b = str1.charAt(i+1);
if(Character.isLetter(a)&&Character.isLetter(b)){
String str=Character.toString(a)+Character.toString(b);
list1.add(str);
}
}
for(int i=0;i<str2.length()-1;i++){
char a = str2.charAt(i);
char b = str2.charAt(i+1);
if(Character.isLetter(a)&&Character.isLetter(b)){
String str=Character.toString(a)+Character.toString(b);
list2.add(str);
}
}
Collections.sort(list1);
Collections.sort(list2);
for(String s: list1){
if(list2.remove(s)){
intersection.add(s);
}
union.add(s);
}
for(String s: list2){
union.add(s);
}
double intersectionSize = intersection.size();
double unionSize = union.size();
double jakard=0;
if(unionSize==0){
jakard=1;
}else{
jakard=intersectionSize/unionSize;
}
answer = (int) (jakard*65536);
return answer;
}
}
728x90
반응형