Algorithm/Programmers

[Programmers - C++] 완주하지 못한 선수

tjddneva 2022. 2. 2. 11:59

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

중복되는 이름이 있어 multiset 을 사용하였다. 

participant 목록을 multiset 에 집어넣고 completion vector 의 목록을 탐색하면서 완주자를 participant multiset 에서 지웠다. 문제에서 한명만 완주 못하였다고 하였으므로 multiset 에는 1명만 남아있게 될 것이고 그 1명을 반환하면 해결된다. 뭔가 더 효율적인 풀이가 있을텐데 일단 이렇게 풀었다. 

 

 

#include <iostream>
#include <cstring>
#include <string.h>
#include <string>
#include <cmath>
#include <vector>
#include <math.h>
#include <algorithm>
#include <list>
#include <stack>
#include <queue>
#include <deque>
#include <tuple>
#include <utility>
#include <typeinfo>
#include <iomanip>
#include <set>
#include <map>

using namespace std;

string solution(vector<string> participant, vector<string> completion) {
    
    string s;
    multiset<string> ms;
    for(int i=0; i<participant.size(); i++){
        ms.insert(participant[i]);
    }
    for(int i=0; i<completion.size(); i++){
        auto it = ms.find(completion[i]);
        ms.erase(it);
    }
    s = *ms.begin();
    return s;
}