공부/프로그래머스

[프로그래머스] [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
반응형