문제는 프로그래머스에서 확인 할 수 있다.
multiset을 이용
#include <string>
#include <vector>
#include <set>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
multiset<string> mset;
for ( auto iter = participant.begin(); iter != participant.end(); iter++ ){
mset.insert(*iter);
}
for ( auto iter = completion.begin(); iter != completion.end(); iter++){
mset.erase(mset.find(*iter));
}
answer = *(mset.begin());
return answer;
}
int main(void){
string ret;
vector<string> participant = {"leo", "kiki", "eden", "leo"};
vector<string> completion = {"eden", "kiki", "leo"};
ret = solution(participant, completion);
printf("%s\n", ret.c_str());
return 0;
}
문제를 해결하고 다른 사람들의 풀이를 보니, hash를 위한 자료구조를 사용하길래 참고하여 다시 구현해보았다.
사용한 자료구조는 unordered_map 으로 자동으로 정렬하지 않는 map으로 이해하면 쉽다.
unordered_map 사용
#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> m;
for( auto elem : participant ){
m[elem]++;
}
for( auto elem : completion ){
if( m.find(elem) != m.end() ){
m[elem]--;
if( m[elem] <= 0 ){
m.erase(elem);
}
}
}
answer = (*(m.begin())).first;
return answer;
}
int main(void){
string ret;
vector<string> participant = {"leo", "kiki", "eden", "leo"};
vector<string> completion = {"eden", "kiki", "leo"};
ret = solution(participant, completion);
printf("%s\n", ret.c_str());
return 0;
}