반응형


 

프로그래머스 - 코딩 테스트 고득점 키트

https://programmers.co.kr/learn/courses/30/lessons/42576

 

 

문제

 

 

풀이

 

unordered_map 자료형을 사용하여 해당 이름이 몇번 입력됬는지를 저장하는 해시맵을 구현하고,

completion에 들어온 사람들중에 participant에 없는 사람을 찾는 방식으로 풀이를 진행할 수 있다.

 

completion안에 있는 사람의 이름과 해당 이름의 출현회수를 저장하는 strkey 해시맵을 선언하고, 

participation 안에 있는 사람의 이름을 strkey안에서 검색한다.

만약 strkey안에 없는 이름이 나올 경우 그 사람은 참가자에는 있지만 완주자 리스트에는 없었다는 의미이므로 그 사람을 리턴한다. 

 

또한 만약 입력에 동명이인이 존재하고 한명만 완주에 성공했을경우를 방지하기 위해 특정 이름이 검색될때마다 strkey[name]-- 연산을 실행시켜준다.

 

만약 strkey[name]이 0보다 작아진다면 completion에 있던 특정 이름의 사람 수보다 participation에 있던 사람 수가 많다는 것이므로 해당 이름을 출력한다.

 

보다 빠른 이해를 위해서는 아래 소스코드를 참고하자.

 

코드

 

#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

string solution(vector<string> participant, vector<string> completion) {
    unordered_map <string, int> strkey;
    for(auto str : completion)
    {
        if(strkey.end() == strkey.find(str))
            strkey[str] = 1;
        else
            strkey[str]++;
    }
    
    for(auto str : participant)
    {
        if(strkey.end() == strkey.find(str))
            return str;
        else
        {
            strkey[str]--;
            if(strkey[str] < 0)
                return str;
        }
    }
}

 

 

평가

 

해시맵에 대해서 이해하고 이를 통해 문제를 풀이하는 방법을 익힐 수 있는 문제이다.

unordered_map이 기존 hash_map과 같은 역할을 수행한다는 것을 알아두자.

 

 

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,