[Algorithm] 1620 나는 포켓몬 마스터 이다솜

gunggme·2023년 11월 20일

알고리즘

목록 보기
13/42

시작

이 문제는 일반적인 문제보다. 어려운 문제다, 그렇다면 한번 풀어봐야 할텐데 문제부터 알아야된다. 문제는 간단하게 말하면, N개의 포켓몬의 이름이 있으며, 그 이후엔 M개의 문제를 내는데, 숫자면, 그 번호에 맞는 포켓몬, 만약 문자열이면, 그 문자열에 맞는 인덱스를 출력하면 되는 문제다. 그렇다면, 한번 알고리즘을 짜기 전, 사용해야되는 함수들을 알아보자, 우선 문제부분에서 입력 받은 문자열이 숫자인걸 확인 하게 해주는 std::isdigit이라는 함수를 사용하면된다. 그러면 밑은 알고리즘이다.

알고리즘

  1. 문제 부분에서 입력받은 문자열이 숫자인지 아닌지 확인
  2. 숫자면, 숫자에 맞는 배열에서 문자열 출력
  3. 문자열이면, 문자열이 같은 배열의 index를 출력

이 알고리즘을 가지고 풀면 쉽게 풀게되게 되는데, 이 문제는 입력받은 자료형을 잘 생각하고 코드를 짜보자.

코드

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>

using namespace std;

bool IsNum(string a) {
	for (char c : a) {
		if (isdigit(c) == 0) return false;
	}
	return true;
}

int main() {
	ios_base::sync_with_stdio();
	cin.tie(NULL); cout.tie(NULL);
	int n, m;
	cin >> n >> m;
	map<int, string> findInt;
	map<string, int> findString;
	for (int i = 0; i < n; i++) {
		string a;
		cin >> a;
		findInt.insert({ i, a });
		findString.insert({ a, i });
	}
	for (int i = 0; i < m; i++) {
		string a;
		cin >> a;
		// 숫자면
		if (IsNum(a)) {
			// findInt의 밸류 
			cout << findInt[stoi(a)-1] << "\n";
		}
		// 문자열이면
		else {
			// findString의 밸류
			cout << findString[a] + 1 << "\n";
		}
	}
}
profile
안녕하세요!

0개의 댓글