#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
int main()
{
// 입출력 속도 향상
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m; //포켓몬 개수, 문제 개수
map<string, int> smap;
map<int, string> imap;
cin >> n >> m;
for(int i=1; i<=n; i++){
string name;
cin >> name;
smap[name] = i;
imap[i] = name;
}
for(int i=0; i<m; i++){
string t;
cin >> t;
if(isdigit(t[0]) != 0){ //number
cout << imap[stoi(t)] << "\n";
}
else{ //string
cout << smap[t] << "\n";
}
}
return 0;
}
번호와 이름을 매칭해서 저장하면 될 거 같다.
map 과 딕셔너리가 떠오르는데 둘의 차이점이 뭐지? (아래 정리함)
맵을 써도 될 듯!
..근데 입력값이 숫자인지 string인지 어떻게 알지?
int로 받거나 auto로 받아서 해보려 했지만 실패.
아! 번호 자체도 string으로 하면 어떨까? map<string, string> m 이렇게!
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
//map -> key : value
//딕셔너리랑 차이점이 뭐지?
int main()
{
int n, m; //포켓몬 개수, 문제 개수
map<string, string> map;
cin >> n >> m;
for(int i=1; i<=n; i++){
string name;
cin >> name;
map[to_string(i)] = name; //insert to map
}
for (int i=0; i<m; i++){
string t;
cin >> t;
for(auto j=map.begin(); j!=map.end(); j++){
if(map.find(t) == j-> first){
cout << j->second;
continue;
}
}
for(auto j=map.begin(); j!=map.end(); j++){
if(t == j->second){
cout << j->first;
continue;
}
}
}
return 0;
}
ㅋㅋ... map 조회하는 법 몰라서 삽질했다. 나의 멍청함에 cheers...~⭐
맵
vs 딕셔너리
맵에서는 엔트리들이 유일한 키를 가져야 하는 반면, 딕셔너리에서는 여러 엔트리들이 같은 키를 가질 수 있다. 갖은 단어가 복수의 정의를 가질 수 있는 영어 사전과 같다고 볼 수 있다.
맵
사용법
- 중복된 key를 사용하여 입력하면 덮어씌어짐.
- 추가, 삽입, 삭제 시 자동정렬
- 선언 : map<key 자료형, value 자료형> m;
- 추가 : map[키] = 값;
- 삭제 : m.erase(key);
- 조회 : m[키];
- 검색 : m.find(key);
- iter = m.find(key); iter -> second; 이런 식으로 출력 가능
isdigit(char x)