Algorithm/programmers
[2018 카카오 블라인드 1차]뉴스 클러스터링
마닐라
2022. 3. 28. 19:46
📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
💡 접근
중복을 허용하는 다중 집합에 대해서 생각해봐야 하는 문제였다.
두 개의 리스트에서 겹치는 부분은 교집합으로 따로 만들어두고 해당 원소를 삭제하면
두 개의 리스트에 남는 집합들이 합집합의 원소들이 된다.
👩💻 코드
import java.io.*;
import java.util.*;
public class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
cutTwoString(str1, list1);
cutTwoString(str2, list2);
if(list1.isEmpty() && list2.isEmpty()) return 65536;
ArrayList<String> intersection = new ArrayList<>();
//교집합
for(String s : list1) {
if(list2.remove(s)) {
intersection.add(s);
}
}
int intersectionSize = intersection.size();
int unionSize = list1.size() + list2.size();
answer = (int) (((double) intersectionSize / unionSize) * 65536);
System.out.println(answer);
return answer;
}
private void cutTwoString(String str2, ArrayList<String> list2) {
for(int lt = 0, rt = 1; rt < str2.length(); lt++,rt++) {
StringBuilder sb = new StringBuilder();
if(!Character.isLetter(str2.charAt(lt)) || !Character.isLetter(str2.charAt(rt))) continue;
sb.append(str2.charAt(lt) + "" + str2.charAt(rt));
list2.add(sb.toString());
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution s = new Solution();
s.solution("aa1+aa2", "AAAA12");
System.out.println();
s.solution("FRANCE", "french");
}
}