https://www.acmicpc.net/problem/1620

 

 

문제가 굉장히 길다 앞부분보다는 입력과 출력 위주로 보고 풀면된다. 나는 입력을 받은 다음에 map과 vector자료형을 

사용하여 만약 문자가 온다면 string과 저장순서가 int로 기록된 map을 통해 출력해주고 만약 숫자가 온다면 벡터안에 저장된 순서에서 1을 빼준 인덱스의 문자를 출력해주는 방식으로 풀어보았다. 

처음에 시간초과가 났는데 이유는 입출력의 크기가 크기 때문이라고 생각해서 cin과 cout를 scanf와 printf 로 바꿔서 풀어주었더니 시간안에 풀 수 있었다.

 

정답코드

#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>

using namespace std;

vector<string> pocket;
unordered_map<string, int> pocket2;
int main()
{
	int n, m;

	char buffer[21];  // 포켓몬 이름을 받을 버퍼

	scanf("%d %d", &n, &m);

	for (int i = 0; i < n; i++)
	{
		string pocketmon;
		scanf("%s", buffer);
		pocket.push_back(buffer);
		pocket2[buffer] = i + 1;
	}

	for (int i = 0; i < m; i++)
	{
		scanf("%s", buffer);
		if (isdigit(buffer[0]))
		{
			printf("%s\n", pocket[stoi(buffer)-1].c_str());
		}
		else
		{
			printf("%d\n", pocket2[buffer]);
		}
	}

	return 0;
}

+ Recent posts