[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;
	}
}
  • 交差コード州
  • を求めます