코딩테스트

[프로그래머스][C++] [1차] 뉴스 클러스터링

이쿠우우 2022. 3. 21. 21:41
반응형

https://programmers.co.kr/learn/courses/30/lessons/17677

 

코딩테스트 연습 - [1차] 뉴스 클러스터링

뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

#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;
}


꾸준히 하다보면 실력이 늘겠지..

반응형