본문 바로가기
알고리즘

[프로그래머스] 완주하지 못한 선수

by _은하별사탕_ 2019. 3. 22.



#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문 돌면서 참가자 목록의 참가자가 완주자 목록에 있는지 확인