
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열participant와 완주한 선수들의 이름이 담긴 배열completion이 주어질 때, 완주하지 못한 선수의 이름을return하도록solution함수를 작성해주세요.
- 제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는participant의 길이보다 1 작습니다.- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 가자 중에는 동명이인이 있을 수 있습니다.
| participant | completion | return |
|---|---|---|
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
입출력 예 설명
예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
participant의 크기만큼 순회하며 Hashmap에 있는 이름에 1씩 더해준다.completion의 크기만큼 순회하며 Hashmap에 있는 이름에 1씩 빼준다.participant에는 있지만 completion에는 없는 이름을 거를 수 있다.#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
unordered_map<string, int> map;
string solution(vector<string> participant, vector<string> completion) {
//반복문으로 participant 만큼 돌면서 map에 있는 이름에 1씩 더해준다.
for(size_t i = 0; i < participant.size(); i++)
{
map[participant[i]]++;
}
// completion에 이름이 있다면, 숫자를 하나 줄여준다.
for (auto& c : completion)
{
map[c]--;
}
//map을 순회하면서 1이 남아있다면 그 요소를 리턴
for(auto& m : map)
{
if (m.second == 1)
return m.first;
}
}
이전에 python으로 풀어봤었던 문제였다. 접근법은 같았으나, 내 방법이 조금 더 복잡했다. 해결법을 알고 있어서 해설을 이해하는 것이 어렵지 않았다.