Study/Coding Test
[2018 1차 KAKAO] 뉴스 클러스터링
_gayeon
2021. 10. 10. 14:53
https://programmers.co.kr/learn/courses/30/lessons/17677
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
벡터의 집합 연산 (합집합, 교집합)이 필요했던 문제.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool isAlphabet(char c){
return (c>='a' && c<='z') || (c>='A' && c<='Z');
}
int solution(string str1, string str2) {
vector<string> str1_vec;
vector<string> str2_vec;
for(int i=0; i<str1.size()-1; i++){
string temp = "";
if(isAlphabet(str1[i]) && isAlphabet(str1[i+1])){
temp += tolower(str1[i]);
temp += tolower(str1[i+1]);
str1_vec.push_back(temp);
}
}
for(int i=0; i<str2.size()-1; i++){
string temp = "";
if(isAlphabet(str2[i]) && isAlphabet(str2[i+1])){
temp += tolower(str2[i]);
temp += tolower(str2[i+1]);
str2_vec.push_back(temp);
}
}
sort(str1_vec.begin(), str1_vec.end());
sort(str2_vec.begin(), str2_vec.end());
vector<string> union_vec(str1_vec.size() + str2_vec.size());
auto iter = set_union(str1_vec.begin(), str1_vec.end(), str2_vec.begin(), str2_vec.end(), union_vec.begin());
union_vec.resize(iter - union_vec.begin());
vector<string> intersec_vec(str1_vec.size() + str2_vec.size());
iter = set_intersection(str1_vec.begin(), str1_vec.end(), str2_vec.begin(), str2_vec.end(), intersec_vec.begin());
intersec_vec.resize(iter - intersec_vec.begin());
if(union_vec.size() == 0){
return 65536;
}
return (double)intersec_vec.size() / (double)union_vec.size() * 65536;
}