[Programmers] 뉴스 클러스터링

Date:

[Programmers] 뉴스 클러스터링

Problem URL : 뉴스 클러스터링

#include <string>
#include <algorithm>
#include <iostream>
#include <unordered_map>

using namespace std;

int solution(string str1, string str2) {
    int size1, size2, ans = 65536;
    double all = 0, dup = 0;
    unordered_map<string, int> um;

    transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
    transform(str2.begin(), str2.end(), str2.begin(), ::tolower);

    size1 = str1.size();
    size2 = str2.size();

    for (int i = 0; i < size1 - 1; i++) {
        if (str1[i] < 97 || str1[i] > 122) continue;
        if (str1[i + 1] < 97 || str1[i + 1] > 122) continue;

        string str(1, str1[i]);
        str += str1[i + 1];
        all++;

        um[str]++;
    }

    for (int i = 0; i < size2 - 1; i++) {
        if (str2[i] < 97 || str2[i] > 122) continue;
        if (str2[i + 1] < 97 || str2[i + 1] > 122) continue;

        string str(1, str2[i]);
        str += str2[i + 1];
        
        // str1에서 중복된 경우는 합집합에 기여하지 않고
        // 교집합에만 기여한다.
        if (um[str] > 0) {
            um[str]--;
            dup++;
        } else {
            all++;
        }
    }

    if (all != 0) {
        ans = (int)(ans * (dup / all));
    }

    return ans;
}

댓글