문제
풀이
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
int i;
unordered_map<string , int> hash;
for(i=0; i<participant.size(); i++){
if(hash.count(participant.at(i))==0)
hash.insert(make_pair(participant.at(i), 1));
else {
hash[participant.at(i)] = hash[participant.at(i)]+1;
}
}
for(i=0; i<completion.size(); i++){
hash[completion.at(i)] = hash[completion.at(i)]-1;
}
for(i=0; i<participant.size(); i++){
if(hash[participant.at(i)]>0)
return participant.at(i);
}
return " ";
}
string자료형의 개수를 파악하는 문제.
해결과정
1. participant의 데이터를 key값으로 설정하고 value를 갯수로 설정.
2. completion의 데이터와 key가 일치하는 value의 갯수를 1씩 줄이기.
3. value가 0이 아닌것이 정답.
for문을 3개나 썼기 때문에... 더 효율적인 방법을 찾아봐야겠다.
다른사람풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
for(int i=0;i<completion.size();i++)
{
if(participant[i] != completion[i])
return participant[i];
}
return participant[participant.size() - 1];
//return answer;
}
해시를 이용한 탐색은 아니지만
각 배열을 sort로 정렬한후 비교하는 방법이 있었다.
반복문도 비교문도 하나씩만있어서 내가쓴코드보다 훨씬 효율적인것같다.
나는 너무 1차원적으로 코드를 짜는 듯 하다...
코테 공부하면서 효율적으로 코딩하는 법을 익혀야겠다.
hash_와 unirdered_의 차이
출처 : https://eocoding.tistory.com/6
unirdered_map
출처 : https://umbum.tistory.com/744
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스]완전탐색 - 모의고사 (0) | 2022.01.27 |
---|---|
[프로그래머스]정렬 - K번째수 (0) | 2022.01.26 |
[프로그래머스] 소수만들기 (0) | 2022.01.25 |
[프로그래머스]내적 & 없는숫자 더하기 / 범용 수치 알고리즘 (0) | 2022.01.24 |
[프로그래머스]로또의 최고 순위와 최저 순위 (0) | 2022.01.23 |