매일 BOJ
(매일 BOJ) C++ 1620번 나는야 포켓몬 마스터 이다솜
norepinephrine
2025. 8. 1. 12:17
이번 문제는 1620번 나는야 포켓몬 마스터 이다솜이다.

접근법
- 포켓몬 이름을 입력받으며:
- 번호 → 이름 저장: vector<string> v[N+1]
- 이름 → 번호 저장: unordered_map<string, int> m
- 쿼리를 읽고:
- 쿼리가 숫자인지 확인 (all_of(s.begin(), s.end(), isdigit))
- 숫자면 v[번호] 출력
- 문자열이면 m[이름] 출력
이름 → 번호 unordered_map<string, int> O(1) 평균 해시 기반 빠른 조회 번호 → 이름 vector<string> (1-based) O(1) 인덱스 직접 접근
작성코드
#include <bits/stdc++.h>
using namespace std;
int main(void){
ios::sync_with_stdio(false); cin.tie(0);
int N,M;
cin >> N >> M;
vector<string> v;
unordered_map<string, int> m;
for(int i = 0; i < N; i++){
string str;
cin >> str;
v.push_back(str);
m[str] = i;
}
for(int j = 0; j < M; j++){
string s;
cin >> s;
bool number = all_of(s.begin(),s.end(),::isdigit);
if(number){
int i = stoi(s);
cout << v[i-1] << '\n';
}
else{
cout << m[s] + 1 << '\n';
}
}
}