문제
문제 해석
- 문자열(포켓몬 이름) 을 입력 받는다.
- 그 후 이름이 나오면 그 포켓몬이 몇번째 입력 받은 것인지
- 숫자가 나오면 그 번째 에 어떤 포켓몬이 입력 받았었는지 출력 하면 되는 문제이다.
알고리즘
- 포켓몬 이름을 입력 받을 때 숫자로 탐색 하기 위한 vector 와 이름으로 탐색 하기 위한 map 을 따로 만들어 동시에 받아 준다.
- 이 후 문제를 입력 받는데 숫자로 입력 되었다면 첫글자가 숫자 일 테니까 문자열로 입력 받은 후 첫 글자의 아스키 코드가 48 ~ 57 사이면 된다.
- 만약 숫자라면 입력 받은 문자열을 숫자로 변경 해 주고 vector 를 통해 이름을 검색 한다.
- 숫자가 아니라면 해당 문자를 map 을 통해 검색 하면 된다.
- 이때 찾을 때 마다 cout 으로 출력 하면 시같 초과가 뜨니 vector 에 정답 데이터를 넣어 두고 한번에 출력 하는 것을 추천 한다.
코드
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
int N, M;
map <string, int> mapset;
vector<string> name;
vector<string> ans;
string tmp;
int main(){
cin >> N >> M;
for(int i = 1; i <= N; i++){
cin >> tmp;
name.push_back(tmp);
mapset.insert({tmp, i});
}
for(int i = 0; i < M; i++){
cin >> tmp;
if(48 <= tmp[0] && tmp[0] <= 57){
ans.push_back(name[stoi(tmp)-1]);
} else {
ans.push_back(to_string(mapset[tmp]));
}
}
for(int i = 0; i < ans.size(); i++){
cout << ans[i] << '\n';
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준_2798 : 블랙잭 - C++ (0) | 2023.06.25 |
---|---|
백준_1676 : 팩토리얼 0의 개수 - C++ (2) | 2023.05.27 |
백준_1966 : 프린터 큐 - C++ (0) | 2023.05.27 |
백준_1929 : 소수 구하기 - C++ (0) | 2023.05.27 |
백준_1541 : 잃어버린 괄호 - C++ (1) | 2023.05.22 |