알고리즘
[프로그래머스] 완주하지 못한 선수
_은하별사탕_
2019. 3. 22. 23:46
#include <string> #include <vector> #include <unordered_map> using namespace std; string solution(vector<string> participant, vector<string> completion) { string answer = ""; unordered_map<string, int=""> um_c; for(string temp : completion){ auto iter = um_c.find(temp); //최초 입력 if( iter == um_c.end() ) { um_c.insert(pair<string, int="">(temp, 1)); } //중복 입력 else { int size = iter->second; um_c[temp] = ++size; } } for(string temp : participant) { auto iter = um_c.find(temp); //참가자의 이름이 완주자 목록에 없을 경우 정답 if(iter == um_c.end()) { answer = temp; break; } else { int size = iter->second; if(iter->second < 1) { answer = temp; break; } um_c[temp] = --size; } } return answer; }
간략 설명 :
- 완주자 목록을 만든 뒤 참가자 목록의 참가자가 완주자 목록에 있는지 확인
목록에 없을 경우 완주자가 아니므로 정답!
unordered_map의 경우 값 넣을 때 pair로 넣거나
um_c.insert({temp, 1});
와 같이 배열로 넣는게 가능
단순히 배열말고도 다른 방식으로도 짜보고 싶어서 pair로 넣었다
동명이인에 대해 처리하기 위해 이름이 같은 경우 명수 +1
for문 돌면서 참가자 목록의 참가자가 완주자 목록에 있는지 확인