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;
}