https://programmers.co.kr/learn/courses/30/lessons/17677?language=cpp#
코딩테스트 연습 - [1차] 뉴스 클러스터링
뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브
programmers.co.kr
풀이는 나중에...
#include <string>
#include <iostream>
#include <vector>
using namespace std;
vector<pair<string,int>> v1,v2;
int solution(string str1, string str2) {
int answer = 0;
//일단 만약 대문자면 다 소문자로 바꾸고 시작하자
for(int i=0;i<str1.size();i++)
{
str1[i] = tolower(str1[i]);
}
for(int i=0;i<str2.size();i++)
{
str2[i] = tolower(str2[i]);
}
//이제 음절별로 나누기, 중복인게 있으면 갯수를 cnt하면됩니다
//1번
for(int i=0;i<str1.size()-1;i++)
{
char tmp1 = str1[i];
char tmp2 = str1[i+1];
//만약 둘중 하나가 알파벳 아니면 그 쌍을 버려버립니다.
if((tmp1<'a')||(tmp1>'z'))
{
continue;
}
if((tmp2<'a')||(tmp2>'z'))
{
continue;
}
//여기까지 왔으면 알파벡으로만 이루어진 쌍임
string tmp;
bool tmpp = false;
tmp.push_back(tmp1);
tmp.push_back(tmp2);
for(int k=0;k<v1.size();k++)
{
if(v1[k].first == tmp)
{
v1[k].second++;
tmpp = true;
break;
}
}
if(tmpp == true)
continue;
v1.push_back(make_pair(tmp,1));
}
//이제 음절별로 나누기, 중복인게 있으면 갯수를 cnt하면됩니다
//2번
for(int i=0;i<str2.size()-1;i++)
{
char tmp1 = str2[i];
char tmp2 = str2[i+1];
//만약 둘중 하나가 알파벳 아니면 그 쌍을 버려버립니다.
if((tmp1<'a')||(tmp1>'z'))
{
continue;
}
if((tmp2<'a')||(tmp2>'z'))
{
continue;
}
//여기까지 왔으면 알파벡으로만 이루어진 쌍임
string tmp;
bool tmpp = false;
tmp.push_back(tmp1);
tmp.push_back(tmp2);
for(int k=0;k<v2.size();k++)
{
if(v2[k].first == tmp)
{
v2[k].second++;
tmpp = true;
break;
}
}
if(tmpp == true)
continue;
v2.push_back(make_pair(tmp,1));
}
//세팅은 다 끝났습니다
//둘다 공집합이면 0
if((v1.size() == 0) && (v2.size() == 0))
return 65536;
int both=0;
int all =0;
int v2_size = v2.size();
vector<int> visited(v2_size,0);
for(int i=0;i<v1.size();i++)
{
//일단 겹치는게 있으면, 그중 작은놈을 both에 더하고 큰놈을 all에 더해
// 안겹친다? all++ 하고 스킵
bool flag =false;
for(int j=0;j<v2.size();j++)
{
if(v1[i].first == v2[j].first)
{
both += min(v1[i].second,v2[j].second);
all += max(v1[i].second,v2[j].second);
visited[j] = 1;
flag = true;
}
}
if(flag == false)
all += v1[i].second;
}
for(int i=0;i<v2.size();i++)
{
if(visited[i] == 0)
all += v2[i].second;
}
answer = (65536*both)/all;
return answer;
}
'c++ > 프로그래머스' 카테고리의 다른 글
백준 2493 : 탑 c++ (0) | 2021.07.01 |
---|---|
프로그래머스 : 등굣길 c++ (DP 연습) (0) | 2021.06.23 |
프로그래머스 : N으로 표현 c++ (0) | 2021.06.21 |
프로그래머스 : 큰 수 만들기 c++ (0) | 2021.06.20 |
프로그래머스 : 조이스틱 c++ (1) | 2021.06.20 |