c++ stl 컨테이너인 map을 사용하면 쉽게 풀 수 있는 문제라 생각한다.
map 컨테이너는 [ ] 로 key값을 이용해 간단하게 value값을 찾을 수 있으며, O(logN) 시간복잡도를 보장한다.
필자는 key값이 string인 map과 int인 map을 두개 만들어서 입력되는 문제가 string일 경우와 int일 경우 if문을 통해 각각 다른 map컨테이너를 검색하도록 구현하였다.
참고로 시간초과로 고생 하시는 분들께서는 ios_bass::sync_with_stdio(0); cin.tie(NULL); 을 추가하고 cout과 cin을 사용해보는 것을 추천합니다.
#include <iostream>
#include <cstdlib>
#include <map>
#include <string>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
map<string, int> poketStr;
map<int, string> poketNum;
int N, M, num=1;
cin >> N >> M;
for (int i = 0; i < N; i++)
{
string str;
cin >> str;
poketStr.insert(make_pair(str, num));
poketNum.insert(make_pair(num++, str));
}
for (int i = 0; i < M; i++)
{
char question[21];
cin >> question;
if (question[0] < 'A')
{
int qNum = atoi(question);
cout << poketNum[qNum] << '\n';
}
else
{
cout << poketStr[question] << '\n';
}
}
return 0;
}
알고리즘 200일 프로젝트 - 43day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 10816번: 숫자 카드 2 (0) | 2020.05.19 |
---|---|
백준 10815번: 숫자 카드 (0) | 2020.05.19 |
백준 6236번: 용돈 관리 (0) | 2020.05.13 |
백준 1780번: 종이의 개수 (0) | 2020.05.12 |
백준 1992번: 쿼드트리 (0) | 2020.05.12 |