티스토리 뷰
성공 코드(내 코드)
참여자 집합과 완주자 집합이 있을 때,
두 집합의 차집합을 구하면 완주하지 못한 선수를 구할 수 있다.
차집합을 set_difference 함수를 이용하여 구하기 전 sort 함수로 정렬이 먼저 이루어져야 한다.
미완주자 = 참여자 - 완주자
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
vector<string> sub(1);
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
set_difference(participant.begin(), participant.end(), completion.begin(), completion.end(), sub.begin());
answer = sub[0];
return answer;
}
다른 사람 풀이
- 참여자와 완주자 vector를 정렬 후 비교함
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
for(int i=0;i<completion.size();i++)
{
if(participant[i] != completion[i])
return participant[i];
}
return participant[participant.size() - 1];
//return answer;
}
- 해시맵을 사용
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> strMap;
for(auto elem : completion)
{
if(strMap.end() == strMap.find(elem))
strMap.insert(make_pair(elem, 1));
else
strMap[elem]++;
}
for(auto elem : participant)
{
if(strMap.end() == strMap.find(elem))
{
answer = elem;
break;
}
else
{
strMap[elem]--;
if(strMap[elem] < 0)
{
answer = elem;
break;
}
}
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스/c++] 소수 만들기 (0) | 2022.08.19 |
---|---|
[프로그래머스/c++] 폰켓몬 (0) | 2022.08.18 |
[프로그래머스/c++] 체육복 (0) | 2022.08.16 |
[프로그래머스/c++] 실패율 (0) | 2022.08.16 |
[백준 2579번/c++] 계단 오르기 (0) | 2022.08.10 |