매일 BOJ

(매일 BOJ) C++ 1620번 나는야 포켓몬 마스터 이다솜

norepinephrine 2025. 8. 1. 12:17

이번 문제는 1620번 나는야 포켓몬 마스터 이다솜이다.

 

접근법

  1. 포켓몬 이름을 입력받으며:
    • 번호 → 이름 저장: vector<string> v[N+1]
    • 이름 → 번호 저장: unordered_map<string, int> m
  2. 쿼리를 읽고:
    • 쿼리가 숫자인지 확인 (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';
            }
        }
        
    }