[1차] 뉴스 클러스터링

LJM·2023년 4월 13일
0

programmers

목록 보기
24/92

https://school.programmers.co.kr/learn/courses/30/lessons/17677

합집합을 만드는 부분이 의외로 어려웠다
한참 삽질하고
A집합 B집합을 그냥 C에다가 다 집어넣고 AB의 교집합을 빼서 해결하였다.

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        
        //소문자로 변환
        str1 = str1.toLowerCase();
        str2 = str2.toLowerCase();
        
        ArrayList<String> arr1 = new ArrayList<>();
        ArrayList<String> arr2 = new ArrayList<>();
        
        ArrayList<String> arr3 = new ArrayList<>();//교집합
        ArrayList<String> arr4 = new ArrayList<>();//합집합
        //두개씩 묶음. 
        for(int i = 0; i < str1.length()-1; ++i)
        {
            char cur = str1.charAt(i);
            char next = str1.charAt(i+1);
            if(isAlpha(cur) && isAlpha(next))
            {
                arr1.add(String.format("%c%c", cur, next));
            }              
        }
        for(int i = 0; i < str2.length()-1; ++i)
        {
            char cur = str2.charAt(i);
            char next = str2.charAt(i+1);
            if(isAlpha(cur) && isAlpha(next))
            {
                arr2.add(String.format("%c%c", cur, next));
            }              
        }
             
        //교집합 같은글자 그대로 유지
        Collections.sort(arr1);
        Collections.sort(arr2);
        ArrayList<String> arr2Copy = new ArrayList<>(arr2);
        for(String s1 : arr1)
        {
            for(String s2 : arr2Copy)
            {
                if(s1.equals(s2))
                {
                    arr3.add(s1);
                    arr2Copy.remove(s2);
                    break;
                }
                    
            }
        }
  
        //합집합
        for(String s1 : arr1)
        {
            arr4.add(s1);
        }
        for(String s2 : arr2)
        {            
            arr4.add(s2);
        }        
        for(String s3 : arr3)
        {          
            arr4.remove(arr4.indexOf(s3));
        }
        
         
        if(arr4.isEmpty())
            answer = 65536;
        else
            answer =  65536 * arr3.size() / arr4.size();
               
        return answer;
    }
    
    public boolean isAlpha(char c)
    {
        if(c >= 'a'&& c <= 'z')
            return true;
        
        return false;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글