✅ LV. 1
🔖 해시
해시테이블을 쓰긴 해야하는데 어떻게 구현해야할지 감이 안 잡혔다.
그나마 key - value
형식으로 사용하려면 그냥 알파벳 첫 글자로 배열이나 벡터 26
개로 백과사전 마냥 쓰는건데 동명이인이나 첫글자 알파벳이 같은 애들끼리 처리할 생각하면 아득하다..
unordered_map
사용key
값은 선수이름, value
값은 선수 count
value
값만 add
해줌key
의 value
를 감소해줌value
값이 0
보다 큰 선수 이름 return
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string,int> map;
for(int i=0;i<participant.size();i++) {
if(map.find(participant[i])==map.end()) {
map.insert({participant[i],1});
}
else map[participant[i]]++;
}
for(int i=0;i<completion.size();i++) {
map[completion[i]]--;
}
for(int i=0;i<participant.size();i++) {
if(map[participant[i]]>0) return participant[i];
}
return answer;
}
1차 코드는 for
문을 너무 많이 써서 불안,,
unordered_set
: unordered_map
과 사용방법 비슷하지만 key
값을 따로 지정해서 삽입해주지 않음 그냥 원소만 삽입해주는 방법unordered_set
에 넣고 완주 선수 이름을 찾아서 지워주기unordered_set
에 남을 것이기 때문에 unordered_set
의 첫번째 값 return
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_multiset<string> names;
for(int i = 0; i < participant.size(); i++)
{
names.insert(participant[i]);
}
for(int i = 0; i < completion.size(); i++)
{
unordered_multiset<string>::iterator itr = names.find(completion[i]);
names.erase(itr);
}
return *names.begin();
}