티스토리 뷰
728x90
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
풀이 :
1. 다중집합 1,2를 선언한다
2. 소문자 대문자를 구분하지 않기 때문에 영문자를 모두 소문자로 바꿔준다.
3. 다중집합 1과 2를 만들어준다 #알파벳만 가능
4. 합지합과 교집합을 구하기 위해 다중집합 1에 원소를 하나씩 꺼내서 다중집합 2를 지워준다.
5. 다중집합 1이 다중집합2에 포함되어 있다면 교집합 intersection +1 씩 해준다. union은 합집합이기 때문에 +1을 계속해준다.
6. 집합 2에 남아있는 원소가 있을수도 있으니 이걸 합집합에 다 넣어준다.
public int solution(String str1, String str2) {
int answer = 0;
ArrayList<String> multiSet1 = new ArrayList<>();
ArrayList<String> multiSet2 = new ArrayList<>();
int union = 0;
int intersection = 0;
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
for (int i = 1; i < str1.length(); i++) {
char t1 = str1.charAt(i - 1);
char t2 = str1.charAt(i);
if (Character.isAlphabetic(t1) && Character.isAlphabetic(t2)) {
multiSet1.add(t1 + "" + t2);
}
}
for (int i = 1; i < str2.length(); i++) {
char t1 = str2.charAt(i - 1);
char t2 = str2.charAt(i);
if (Character.isAlphabetic(t1) && Character.isAlphabetic(t2)) {
multiSet2.add(t1 + "" + t2);
}
}
for (String s : multiSet1) {
if (multiSet2.remove(s)) {
intersection++;
}
union++;
}
union += multiSet2.size();
double jakard = 0;
if (union == 0) {
jakard = 1;
} else {
jakard = (double) intersection/ (double) union;
}
return (int) (jakard * 65536);
}
'알고리즘 - Java' 카테고리의 다른 글
[Programmers] 피로도 - Java (0) | 2022.03.31 |
---|---|
[Programmers] 큰 수 만들기 - Java (0) | 2022.03.30 |
[Programmers] 베스트 앨범-Java (0) | 2022.03.20 |
[Programmers] 영어 끝말잇기-Java (0) | 2022.03.18 |
[COS Pro 1급] - 메모장(6차) (0) | 2022.03.16 |
댓글