Programmers Review

[Lv 2] [1차] 뉴스클러스팅

hanseongbugi 2024. 8. 2. 15:59

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

원소의 교집합과 합집합을 구하는 문제이다.

교집합은 2개의 원소 배열에 같은 원소의 개수를 구하고

합집합은 A집합을 그대로 넣고 교집합이 아닌 B집합의 원소를 넣으면 된다.

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

string calc(string str){
    string temp = "";
    
    for(int i = 0;i<str.length();i++){
        if(str[i] >= 'A' && str[i] <= 'Z')
            temp += str[i] + 32;
        else
            temp += str[i];
    }
    return temp;
}
int solution(string str1, string str2) {
    int answer = 0;
    double interNum = 0;
    vector<string> v_union;
    vector<string> v_inter1;
    vector<string> v_inter2;
    for(int i = 0;i<str1.length()-1;i++){
        string temp = "";
        if(!isalpha(str1[i]) || !isalpha(str1[i+1]))
            continue;
        
        temp += str1[i];
        temp += str1[i+1];
        temp = calc(temp);
        v_inter1.push_back(temp);
    }
    
    for(int i = 0;i<str2.length()-1;i++){
        string temp = "";
        if(!isalpha(str2[i]) || !isalpha(str2[i+1]))
            continue;
        
        temp += str2[i];
        temp += str2[i+1];
        temp = calc(temp);
        v_inter2.push_back(temp);
    }
    while(!v_inter1.empty()){
        string temp = v_inter1.back();
        v_inter1.pop_back();
        v_union.push_back(temp);
        
        auto iter = find(v_inter2.begin(),v_inter2.end(),temp);
        if(iter != v_inter2.end()){
            interNum++;
            v_inter2.erase(iter);
        }
    }
    while(!v_inter2.empty()){
        string temp = v_inter2.back();
        v_inter2.pop_back();
        v_union.push_back(temp);
    }

    if(v_union.empty() && interNum == 0)
        answer = 65536;
    else{
        if(v_union.empty())
            answer = 0;
        else if(interNum == 0)
            answer = 0;
        else{
            answer = (interNum / v_union.size()) * 65536;
        }
    }
    return answer;
}