메이플스토리에 존재하는 모든 모험가 직업과, 당신이 키워본 모험가 직업이 주어졌을 때
새로 키워볼 수 있는 모험가 직업을 모두 나열하는 프로그램이다.
맵과 셋을 이용해 구현해보았다.
셋으로 구현
#include <iostream>
#include <map>
#include <set>
using namespace std;
int main()
{
set<string> m;
int n; //총 직업 수
cin >> n;
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
m.insert(a);
}
cin >> n; //내가 고른 직업 수
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
m.erase(a);
}
cout << m.size() << endl;
for (auto v : m) {
cout << v << endl;
}
return 0;
}
1). string형 set 하나 선언해주고, 총 직업의 갯수를 받아온다.
총 직업의 갯수만큼 반복문을 돌려 직업의 이름들을 추가로 받고, 받은 직업 이름을 set에 추가한다.
2). 내가 키워본 직업의 갯수도 받아온다.
받아온 갯수 만큼 반복문을 돌려 직업의 이름을 추가로 받고, 받은 직업 이름을 set에서 제거한다.
(총 직업에서 내가 해본 직업을 빼는 것. 결국 set안에는 안해본 직업들만 남게됨)
3). 마지막으로 set의 크기를 출력하고, 반복문을 돌아 set의 값들을 출력한다.
맵으로 구현
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
map<string, int> m;
int n; //총 직업 수
cin >> n;
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
m[a]++;
}
cin >> n; //내가 키워본 직업 수
for (int i = 0; i < n; i++)
{
string a;
cin >> a;
m.erase(a);
}
cout << m.size() << endl;
for (auto i : m)
{
if (i.second == 0) continue;
cout << i.first << endl;
}
return 0;
}
1). string, int형 map을 하나 선언해주고, 총 직업의 갯수를 받아온다.
총 직업의 갯수만큼 반복문을 돌려 직업의 이름들을 추가로 받고, 받은 직업 이름을 map에 추가한다.
2). 내가 키워본 직업의 갯수도 받아온다.
받아온 갯수 만큼 반복문을 돌려 직업의 이름을 추가로 받고, 받은 직업 이름을 map에서 제거한다.
(총 직업에서 내가 해본 직업을 빼는 것. 결국 map안에는 안해본 직업들만 남게됨)
3). 마지막으로 map의 크기를 출력한다.
map일 때는, value값이 0이면 지워졌다는 의미이므로 i.second가 0이면 계속 반복문을 돌고,
0이 아니라면 직업의 이름을 출력한다.
결과
'알고리즘 문제풀이' 카테고리의 다른 글
[백준][C++] 회사에 있는 사람 (0) | 2023.11.01 |
---|---|
[프로그래머스][C++] 배열 회전시키기 (0) | 2023.10.26 |