처음에는 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 |