728x90
vector와 algorithm 헤더를 이용한 풀이
sort를 이용해 참가자와 완주자 배열을 정렬해주면, 같은 이름의 참가자들은 각 배열에서 같은 위치에 위치하게 된다.
(이 때 sort는 algorithm 헤더를 선언해줘야 사용 가능하다.)
만약 완주하지 못한 참가자가 있다면 각 위치에 다른 이름이 위치하게 되므로 return으로 해당 참가자 이름을 돌려주고, 끝까지 다른 위치가 없다면 참가자가 한명 많으므로 마지막 참가자 이름을 돌려준다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
for (int i = 0; i < participant.size(); i++) {
if (participant[i] != completion[i]) return participant[i];
}
return participant.back();
}
int main()
{
vector<string> part = { "mislav", "stanko", "mislav", "ana" };
vector<string> cpt = { "stanko", "ana", "mislav" };
string a;
a = solution(part, cpt);
cout << a;
system("pause");
return 0;
}
vector 메소드 정리
https://coding-maggot.tistory.com/12?category=898943
해시를 함께 이용한 풀이
<설명>
해시는 key와 value를 이용하는 방법으로, #include <map> 을 해준 후 사용 가능하다.
map<string, int> 선언 후 완주한 선수 먼저 배열을 돌며 각 완주자 이름(key)의 int(value) 값을 1씩 올려준다.
그리고 참가자 배열을 돌며 각 참가자 이름(key)의 int(value) 값을 1씩 빼준다.
이 때 완주자 count를 올려주지 않았던 참가자는 값이 0에서 시작해 1이 감소하므로 이 경우 해당 문자열을 return으로 주게 한다.
#include <iostream>
#include <string>
#include <vector>
#include <map>
string solution(vector<string> participant, vector<string> completion) {
map<string, int> comp;
for (string c : completion) {
comp[c]++;
}
for (string p : participant) {
comp[p]--;
if (comp[p] < 0) return p;
}
}
'[C_C++]코딩테스트 연습 > [프로그래머스] level 2' 카테고리의 다른 글
[프로그래머스] 프린터 (pair, priority queue) - C++ 스택&큐 (0) | 2021.10.18 |
---|---|
[프로그래머스] 기능개발 - C++ 스택&큐 (0) | 2021.10.17 |
[C++] 프로그래머스 hash 2 - 위장 (0) | 2021.10.17 |
[C++] 프로그래머스 hash 2 - 전화번호 목록 (0) | 2021.10.17 |