#include <string>
#include <vector>
#include <cstdlib>
#include <cctype>
#include <algorithm>
using namespace std;
vector<string> toSet(string str) {
vector<string> ret;
for (int i = 0; i<str.size() - 1; i++) {
string tmp = "";
if (isalpha(str[i]) != 0 && isalpha(str[i + 1]) != 0) {
tmp += toupper(str[i]);
tmp += toupper(str[i + 1]);
ret.push_back(tmp);
}
}
return ret;
}
vector<string> sum(vector<string> base, vector<string> other, vector<string> com) {
base.insert(base.end(), other.begin(), other.end());
for (int i = 0; i < com.size(); i++) {
base.erase(find(base.begin(), base.end(), com[i]));
}
return base;
}
vector<string> com(vector<string> base, vector<string> other) {
vector<string> ret;
for (int i = 0; i<other.size(); i++) {
if (find(base.begin(), base.end(), other[i]) != base.end()) {
ret.push_back(other[i]);
base.erase(find(base.begin(), base.end(), other[i]));
}
}
return ret;
}
int solution(string str1, string str2) {
int answer = 0;
int bunmo = 0; int bunja = 0;
double num = 0;
vector<string> c;
vector<string> v1 = toSet(str1);
vector<string> v2 = toSet(str2);
c = com(v1, v2);
bunja = c.size();
bunmo = sum(v1, v2,c).size();
if (bunja == 0 && bunmo == 0)
return 65536;
num = (double)bunja / (double)bunmo;
answer = num * 65536;
return answer;
}
int main(void) {
solution("aa1+aa2", "AAAA12");
}
toSet함수
toSet함수는 인자로 전달된 String에서 알파벳으로만 이루어진 두 글자를 끊어서 다중집합을 구성하는 함수이다.
사용된 isalpha()함수는 해당 문자가 알파벳이 아니라면 0을 리턴한다.
sum함수
sum함수는 인자로 전달된 base벡터에 other벡터를 붙여준 후, 전달된 벡터com을 삭제하여 합집합을 구성한다.
com함수
com함수는 인자로 전달된 base벡터와 other벡터의 교집합을 구해준다. 해당 문제에서는 중복되는 원소도 인정하므로, other벡터의 원소를 base벡터에서 찾은경우 ret벡터에 추가해주지만, base 벡터에서는 해당 원소를 삭제해 주어야한다.
반응형
'알고리즘 문제 > C++' 카테고리의 다른 글
[프로그래머스] Level2 : 최댓값과 최솟값 - C++ (0) | 2020.07.10 |
---|---|
[프로그래머스] Level2 : 스킬트리 - C++ (0) | 2020.07.10 |
[프로그래머스] Level1 : [1차]다트 게임 - C++ (0) | 2020.07.06 |
[프로그래머스] Level1 : 키패드 누르기 - C++ (0) | 2020.07.03 |
[프로그래머스] Level1 : 실패율 - C++ (0) | 2020.07.03 |