Notice
Recent Posts
Recent Comments
Link
bdfgdfg
[레벨1] 완주하지 못한 선수 본문
반응형
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> um;
for(string& s : completion)
{
auto it = um.find(s);
if(it != um.end()) // 이미 키가있다 (중복된 이름)
it->second++;
else
um.insert(make_pair<string&,int>(s,1));
}
for(string& s : participant)
{
auto it = um.find(s);
if(it == um.end() || it->second <= 0)
{
answer = s;
break;
}
else
it->second--;
}
return answer;
}
참여 선수가 목록에 있는지 찾는 문제.
c++의 해시 맵 컨테이너인 unordered_map을 사용하여 completion(완주한 선수 목록)의 정보를 담고, 만약 키가 중복되는 게 있다면 value값을 ++해준다.
그런 다음 참가 목록을 읽어 들이면서 참가 선수 목록에서 만약 해시 맵에 등록된 키가 없다면(이터레이터는 end를 가리킨다) 그 선수가 완주하지 못한 선수이고. 만약 중복된 이름이 있다면 1씩 감소시키면서 0 이하라면 그 선수가 완주하지 못한 선수.
이 문제는 unordered_map이나 map 컨테이너를 사용하면 쉽게 풀리는 문제이다.
unordered_map 컨테이너도 map컨테이너처럼 []연산자를 이용해 쉽게 키-value를 저장할 수 있는데(물론 없는 키인데 접근하면 추가해버린다는 것도 기억) 위 문제에선 반복자를 이용해 풀어보았다.
다만 한가지 막힌 오류가 있었는데. make_pair의 인수 목록에서 string 변수를 넘길 때, make_pair <string, int>가 아닌
make_pair <string&,으로 명시해야 한다.
참고:
https://stackoverflow.com/questions/42853360/make-pair-does-not-work-with-string-works-with-string
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[레벨1] 문자열 다루기 기본 (0) | 2021.08.14 |
---|---|
[레벨1] 행렬의 덧셈 (0) | 2021.08.13 |
[레벨1] 모의고사 (0) | 2021.08.12 |
[레벨1] 체육복 (0) | 2021.08.10 |
[레벨1] 숫자 문자열과 영단어 (0) | 2021.08.08 |
Comments