Computer Science/C++

백준 C++ | #27 BOJ1620 나는야 포켓몬 마스터 이다솜 C++ 문제 풀이

토마토. 2022. 9. 2. 09:41

1620번: 나는야 포켓몬 마스터 이다솜 (acmicpc.net)

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

마찬가지로 C++ STL map을 이용해서 푸는 문제였다. 

이 문제는 시간초과가 관건이라 최대한 간단하게 생각해내는 게 중요한 것 같다. 

그리고 출력을 따로 벡터에 저장하지 않고 바로바로 처리해줘도 된다는 걸 오늘 알았다. 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <map>
#include <string>
#include <cstring>

int main() {
	int n = 0, m = 0;
	scanf("%d %d", &n, &m);

	std::string name[100001];
	std::map<std::string, int> string_to_int;

	for (int i = 0; i < n; i++) {
		char* tmp = new char[21];
		scanf("%s", tmp);
		string_to_int[tmp] = i + 1;
		name[i + 1] = tmp;
	}

	for (int i = 0; i < m; i++) {
		char* tmp = new char[21];
		scanf("%s", tmp);
		
		// 숫자
		if (std::isdigit(tmp[0]) != 0) {
			int n = std::stoi(tmp);
			char* answer = strcpy(new char[name[n].length() + 1], name[n].c_str());
			printf("%s\n", answer);
		}
		// 문자
		else {
			
			printf("%d\n", string_to_int[tmp]);

		}
	}
	return 0;
}