프로그래머스 - 코딩 테스트 고득점 키트
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과 같은 역할을 수행한다는 것을 알아두자.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers / Sorting] - H Index C++ 풀이 (0) | 2020.03.27 |
---|---|
[Programmers / Sorting] - 가장 큰 수 C++ 풀이 (0) | 2020.03.27 |
[Programmers / Sorting] - K번째 수 C++ 풀이 (0) | 2020.03.27 |
[Programmers / Hash] - 위장 C++ 풀이 (2) | 2020.03.22 |