[Programmers/JAVA] [1차] 뉴스 클러스터링

2023. 2. 21. 17:04자바/프로그래머스

 

내 코드

import java.util.*;
class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;

        String pattern="[A-Z]";

        String[] str1_split=str1.toUpperCase().split("");
        String[] str2_split=str2.toUpperCase().split("");

        List<String> str1_list=new ArrayList<>();
        List<String> str2_list=new ArrayList<>();

        //두 char가 모두 문자라면 add
        for(int i=0; i<str1_split.length-1; i++) {
            boolean c1_result=str1_split[i].matches(pattern);
            boolean c2_result=str1_split[i+1].matches(pattern);
            if(c1_result && c2_result) {
                str1_list.add(str1_split[i]+str1_split[i+1]);
            }
        }
        for(int i=0; i<str2_split.length-1; i++) {
            boolean c1_result=str2_split[i].matches(pattern);
            boolean c2_result=str2_split[i+1].matches(pattern);
            if(c1_result && c2_result) {
                str2_list.add(str2_split[i]+str2_split[i+1]);
            }
        }
        
        //둘 다 공집합이라면
        if(str1_list.size()==0 && str2_list.size()==0){
            answer=65536;
            return answer;
        }

        //공집합 구하기
        int union=str1_list.size()+str2_list.size();
        int intersection=0;
        for(String str : str1_list) {
            if(str2_list.contains(str)) {
                str2_list.remove(str);
                intersection++;
            }
        }

        union-=intersection;
        answer=(int)(((double)intersection/union)*65536);

        
        return answer;
    }
}

 

느낀점

생각보다 쉬웠다. 코드가 반복되는 구간은 메소드를 활용했어도 좋았을 것 같다. 반복되는게 많아서 이게 맞나..? 반복하지않고는 안되는건가..? 했는데 안되는게 맞는 것 같다.. 아쉬운 점은 반복되는 구간이 있음에도 메소드를 활용안한 점과 union에서 intersection을 빼줘야하는데 str2_list의 size가 intersection을 구하는 도중에 바껴서 깔끔하게 빼주지 못했다는 점...