include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <string>
using namespace std;
int n, m;
// 숫자 인덱스를 이용해 문자열을 가져오기 위한 벡터
vector<string> v;
// 문자열을 키로 사용해 숫자를 가져오기 위한 맵(딕셔너리)
map<string, int> ma;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
int ansIdx;
string ansStr;
string name;
// 포켓몬들 정보 입력 부분
for(int i = 0 ; i < n ; i++)
{
cin >> name;
v.emplace_back(name);
ma.insert(pair<string, int>(name, i+1));
}
for(int i = 0 ; i < m ; i++)
{
cin >> ansStr;
// 만약 입력된 문자열이 숫자라면
if(atoi(ansStr.c_str()))
{
// 숫자로 바꿔준다음 해당 인덱스로 값을 출력
ansIdx = stoi(ansStr);
cout << v[ansIdx - 1] << '\n';
}
// 숫자가 아닐 경우 맵의 키값으로 사용하여 번호 출력
else
{
cout << ma[ansStr] << '\n';
}
}
}
[Try]
1. 이건 누가 봐도 딕셔너리다!! (map)
생각해보니 파이썬에서나 딕셔너리지 c++ 에서는 vector 로 저장해도 별 다를게 없어 보인다. 시간제한이 2초인데도 시간초과
2. 벡터에서 find 로 하나하나 찾는게 시간이 오래 걸리는 것 같아서, 인덱스로 문자열을 출력하는 벡터와, 문자열로 인덱스를 출력
하는 맵을 두 개 설정해서 따로 처리해줬다.
[Point]
1. map 자료구조
2. <iostream> 에 포함되어있는 atoi(), <string> 의 stoi()
3. <algorithm> 의 find(), distance()
4. 굳이 문자열을 atoi 비교할 필요 없이 문자열의 첫 인덱스가 숫자인지만 확인해도 됐다.
[More]
1. 컨테이너와 알고리즘, 반복자간의 관계와 개념 명확히 잡아놓을 것.
'PS > BOJ' 카테고리의 다른 글
[백준] 1931.cpp : 회의실배정 (0) | 2020.05.27 |
---|---|
[백준] 11724.cpp : 연결 요소의 개수 (0) | 2020.05.27 |
[백준] 11726.cpp : 2 x n 타일링 (0) | 2020.05.26 |
[백준] 4948.cpp : 베르트랑 공준 (0) | 2020.05.26 |
[백준] 11723.cpp : 집합 (0) | 2020.05.26 |