[Programmers][1]ニュースクラスタ-2018 KAKAO BLIND RECRUITMENT
import java.util.ArrayList;
// [1차] 뉴스 클러스터링 - 2018 KAKAO BLIND RECRUITMENT
public class NewsClustering {
public int solution(String str1, String str2) {
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
splitStr(str1, list1);
splitStr(str2, list2);
double intersection = intersectionList(list1, list2).size();
double union = list1.size() + list2.size() - intersection; // A U B = A + B - A^B
double answer = union == 0 ? 1 : intersection / union; // 삼항연산자 예외처리
return (int) (answer * 65536);
}
public static void splitStr(String str, ArrayList<String> list) { // String을 대문자로 변환하여 2글자 씩 끊어서 List에 저장하는 메소드
str = str.toUpperCase();
for (int i = 1; i < str.length(); i++) {
if ((str.charAt(i - 1) >= 'A' && str.charAt(i - 1) <= 'Z')
&& (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')) {
list.add(str.charAt(i - 1) + "" + str.charAt(i) + "");
}
}
}
public static ArrayList<String> intersectionList(ArrayList<String> list1, ArrayList<String> list2) { // 교집합 구하는 코드 잘 짜야함 (TC 4,7,9,10,11 주의)
ArrayList<String> result = new ArrayList<>(); // 교집합의 결과를 저장 할 List
ArrayList<String> l1 = new ArrayList<>(list1); // List를 복사해서 사용하지 않으면 list2의 공간을 동시에 사용하게 되어 합집합 식에 오류가 발생함
ArrayList<String> l2 = new ArrayList<>(list2);
for (String ele : l1) {
if (l2.contains(ele)) {
result.add(ele);
l2.remove(l2.indexOf(ele));
}
}
return result;
}
}
Reference
この問題について([Programmers][1]ニュースクラスタ-2018 KAKAO BLIND RECRUITMENT), 我々は、より多くの情報をここで見つけました https://velog.io/@kmdngmn/Programmers-1차-뉴스-클러스터링-2018-KAKAO-BLIND-RECRUITMENTテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol