코딩테스트
[프로그래머스][C++] [1차] 뉴스 클러스터링
이쿠우우
2022. 3. 21. 21:41
반응형
https://programmers.co.kr/learn/courses/30/lessons/17677
글쓴이의 답
개인적인 풀이 임으로
이것보다 더 좋은 알고리즘은 많음...
이렇게도 풀이하는구나.. 공유하기 위해 올림...
#include <string>
#include <iostream>
#include <vector>
#include <cctype>
using namespace std;
vector<string> makeInsert(string str){
vector<string> result;
for(int i=0; i < str.size(); i++){
if(str.size() ==i+1){
break;
}
char temp1 = toupper(str[i]);
if((temp1 < 'A') || (temp1 > 'Z')){
continue;
}
char temp2 = toupper(str[i+1]);
if((temp2 < 'A') || (temp2 > 'Z')){
continue;
}
string insert;
insert.push_back(temp1);
insert.push_back(temp2);
result.push_back(insert);
}
return result;
}
int findSame(vector<string> arr1, vector<string> arr2, int &same, int &sum){
for(int i=0; i< arr1.size(); i++){
int k=0;
bool check = false;
for(k=0; k< arr2.size(); k++){
if(arr1[i] == arr2[k]){
same++;
sum++;
arr2.erase(arr2.begin()+k);
check = true;
break;
}
}
if(check != true){
sum+=1;
}
}
if(0 != arr2.size()){
sum += arr2.size();
}
return 0;
}
int solution(string str1, string str2) {
int answer = 0;
vector<string> arr1 = makeInsert(str1);
vector<string> arr2 = makeInsert(str2);
if((arr1.size() == 0)&&(arr2.size() == 0)){
answer = 65536;
return answer;
}
int same = 0;
int sum =0;
findSame(arr1, arr2, same, sum);
answer = ((double)same/(double)sum) * 65536;
return answer;
}
꾸준히 하다보면 실력이 늘겠지..
반응형