프로그래머스/lv2/17677.[1차]뉴스 클러스터링 2018 KAKAO BLIND RECRUITMENT

SITY·2023년 9월 16일
0

Cpp_Algorithm

목록 보기
6/43

업로드중..

#include <string>
#include <set>
#include <algorithm>

using namespace std;

int solution(string str1, string str2) {
    multiset<string> set1, set2, interSet, unionSet;
    
    transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
    transform(str2.begin(), str2.end(), str2.begin(), ::tolower);
    
    if (str1 == str2) return 65536;
    
    for (int i = 0; i < str1.size() - 1; i++) {
        string temp = str1.substr(i, 2);
        if (isalpha(temp[0]) && isalpha(temp[1])) set1.insert(temp);
    }
    for (int i = 0; i < str2.size() - 1; i++) {
        string temp = str2.substr(i, 2);
        if (isalpha(temp[0]) && isalpha(temp[1])) set2.insert(temp);
    }
    
    set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(),
                     inserter(interSet, interSet.begin()));
    set_union(set1.begin(), set1.end(), set2.begin(), set2.end(),
              inserter(unionSet, unionSet.begin()));

    return (double)interSet.size() / (double)unionSet.size() * 65536;
}

2개의 문자열을 대소문자 구분이 없으니 소문자로 바꿔준 다음, 문자열을 2칸씩 자르고, 2칸이 모두 알파벳이라면 각각 중복이 허용되는 multiset인 set1, set2에 넣어준다.

그 다음 두 set의 교집합을 구하는 set_intersection함수와 합집합을 구하는 set_union을 사용해주고,
형변환 후 각각의 set.size()로 나눈 뒤 65536을 곱한 값을 return해준다. 그럼 int형으로 return되기에 소수부는 제거된다.

STL에 편한 함수가 많으니 찾아보고 공부할 필요성이 많은 것 같다.

//코딩 스타일을 BSD에서 K&R로 바꾸기로 했다. 적응이 안되지만 최대한 빨리 적응해봐야겠다

profile
·ᴗ·

0개의 댓글