Programming/백준 (c++)
[백준] #1620: 나는야 포켓몬 마스터 이다솜
마이구미포포
2022. 9. 12. 00:30
https://www.acmicpc.net/problem/1620
1620번: 나는야 포켓몬 마스터 이다솜
첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면
www.acmicpc.net
문제
- 포켓몬의 이름이 입력되면 포켓몬 번호를 출력
- 포켓몬의 번호를 입력하면 포켓몬 이름을 출력
제한사항
- 도감에 수록되어 있는 포켓몬으 ㅣ수의 범위는 1<=N<=100,000
- 맞춰야하는 문제의 개수의 범위는 1<=M<=100,000
- 포켓몬의 이름은 첫글자가 대문자이며 길이가 20이하인 영어 문자열
예제 입력 1
26 5
Bulbasaur
Ivysaur
Venusaur
Charmander
Charmeleon
Charizard
Squirtle
Wartortle
Blastoise
Caterpie
Metapod
Butterfree
Weedle
Kakuna
Beedrill
Pidgey
Pidgeotto
Pidgeot
Rattata
Raticate
Spearow
Fearow
Ekans
Arbok
Pikachu
Raichu
25
Raichu
3
Pidgey
Kakuna
예제 출력 1
Pikachu
26
Venusaur
16
14
코드
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0); //scanf를 사용하지 않겠다 (시간 빨라짐)
int n, m; // 포켓몬 개수 (n), 문제 개수(m)
string input; //포켓몬 이름
map<string, int> poket_name; //이름이 key 번호가 value
map<int, string> poket_num; //번호가 key 이름이 value
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> input;
poket_name[input] = i;
poket_num[i] = input;
}
while (m--) {
cin >> input;
//isdigit: 입력값이 문자인지 숫자인지 구별
if (isdigit(input[0])) { //숫자 입력이라면
int number = stoi(input); //string to int
cout << poket_num[number] << '\n'; //number에 해당하는 value(이름) 출력
}
else { //문자 입력이라면
cout << poket_name[input] << '\n'; //input(이름)에 해당하는 value(번호) 출력
}
}
return 0;
}