[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을 구하는 도중에 바껴서 깔끔하게 빼주지 못했다는 점...
'자바 > 프로그래머스' 카테고리의 다른 글
[Programmers/JAVA] 전화번호 목록 (0) | 2023.02.23 |
---|---|
[Programmers/JAVA] 연속 부분 수열 합의 개수 (0) | 2023.02.22 |
[Programmers/JAVA] 프린터 (0) | 2023.02.20 |
[Programmers/JAVA] 귤 고르기 (0) | 2023.02.20 |
[Programmers/JAVA] n^2 배열 자르기 (0) | 2023.02.17 |