프로그래머스라는 사이트에서 제시된 문제를 풀어봤다. C++을 제대로 배운 적이 없어 고생했지만, 인터넷에 샘플이 많이 나와서 문제를 풀 수 있었다.
첫번째 문제
참고사이트
처음에는 제시된 문제에 벡터가 있어서 벡터를 이용해 풀었는데, 사이트를 확인해 보니 해쉬를 배우기 위한 문제였기에 다시 해쉬를 이용해서 풀었다. C++컴파일러가 PC에 설치되어 있지 않아도 괜챦다. 위의 코드실행기 사이트를 통해 실행하고 결과를 확인할 수 있다.
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
map<string, int> m;
map<string, int>::iterator i;
for (string s:participant) {
i = m.find(s);
if (i != m.end()) {
m[s] = m[s] + 1;
} else {
m[s] = 1;
}
}
for (string s:completion) {
m[s] = m[s] - 1;
}
for(i = m.begin(); i != m.end(); i++){
//cout << "[" << i->first << "] " << i->second << endl;
if (i->second > 0) answer = i->first;
}
return answer;
}
int main() {
vector<string> participant = {"mislav", "stanko", "mislav", "ana"};
vector<string> completion = {"stanko", "ana", "mislav"};
string answer = solution(participant, completion);
cout << answer << endl;
}
벡터를 이용해서 문제를 풀려면 조금 복잡하다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
for(std::vector<string>::iterator iter1 = participant.begin(); iter1 != participant.end(); ){
for(std::vector<string>::iterator iter2 = completion.begin();iter2 != completion.end(); ){
cout << *iter1 << "\t" << *iter2;
if((*iter1) == (*iter2)) {
iter1 = participant.erase(iter1);
iter2 = completion.erase(iter2);
--iter1;
break;
} else {
++iter2;
}
}
++iter1;
}
cout << "\nanswer:" << endl;
for (string s:participant) {
cout << s << endl;
}
return answer;
}
int main() {
vector<string> participant = {"mislav", "stanko", "mislav", "ana"};
vector<string> completion = {"stanko", "ana", "mislav"};
solution(participant, completion);
}
두번째 문제
세번째 문제
#include <iostream> #include <string> #include <vector> #include <map>
나의 답을 입력하고 다른 사람의 답을 봤는데, 나와 비슷하지만 코드가 너무 깔끔해서 여기에 적어본다. 해쉬를 이용하면서 정작 해쉬의 특성을 이용하지 않고 코딩한 셈이다. ㅎㅎ
int solution(vector<vector> clothes) {
int answer = 1;
unordered_map <string, int> attributes;
for(int i = 0; i < clothes.size(); i++)
attributes[clothes[i][1]]++;
for(auto it = attributes.begin(); it != attributes.end(); it++)
answer *= (it->second+1);
answer--;
return answer;
}
네번째 문제
다른 사람이 푼 답을 봤는데, 내가 하고 싶었던 방식이였다. C++문법에 익숙하지 못해 그방법을 못 찾았다. 장르별로 배열을 선언해서 저장하고 해당 장르에서 다시 정렬을 이용한 방식으로 사용했다.
unordered_map<string, vector<pair<int, int>>> genmap;
