처음에는 map<이름, 번호> 맵 하나로 풀었다가 시간초과가 났다. 
입력 개수가 최대 10만이기 때문에 하나의 map으로는 시간초과가 난다. 
그래서 map을 2개 만들어놔서 풀었다.  
 
하나는 이름을 입력하면 번호를 값으로 갖는 smap<이름, 번호> 이다. 
다른건 숫자를 입력하면 이름을 값으로 갖는 nmap<번호, 이름> 이다. 
이렇게 하면 반복문을 안돌아도 값을 바로 찾을 수 있다. 
 
#include <bits/stdc++.h>
using namespace std;

int n, m; // 포켓몬개수, 문제개수
string name, input;
map<string, int> smap; // 문자 입력 -> 숫자출력
map<int, string> nmap; // 숫자 입력 -> 문자출력

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n >> m;
  for(int i = 1; i <= n; i++){
    cin >> name;
    smap.insert({name, i}); // {이름, 인덱스}
    nmap.insert({i, name}); // {인덱스, 이름}
  }

  for(int i = 0; i< m; i++){
    cin >> input;
    if(isdigit(input[0])){ // 숫자라면 0이 아닌 수가 나온다
      cout << nmap[atoi(input.c_str())]<< '\n';
    }else{ // 문자
      cout << smap[input] << '\n';
    }
  }

  return 0;
}
 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

최소 힙 백준 1927번 c++  (0) 2022.02.19
ATM 백준 11399번 c++  (0) 2022.02.19
최대 힙 백준 11279번 c++  (0) 2022.02.19
집합 백준 11723번 c++  (0) 2022.02.19
바이러스 백준 2602번 c++  (0) 2022.02.19

+ Recent posts