알고리즘 모음(C++)

백준 1620 - 나는야 포켓몬 마스터 이다솜(C++) 본문

백준

백준 1620 - 나는야 포켓몬 마스터 이다솜(C++)

공대생의 잡다한 사전 2022. 2. 9. 12:48

문제 링크입니다. https://www.acmicpc.net/problem/1620

 

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

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

www.acmicpc.net

map을 사용하는 문제였습니다.

출력 예시

출력을 2가지로 나눠서 해야합니다.

1. 포켓몬의 이름이 들어왔을 경우 -> 해당 포켓몬의 입력 번호

2. 포켓몬의 번호가 들어왔을 경우 -> 해당 번호 포켓몬의 이름

 

2번 출력의 경우는 쉽게 만들 수 있습니다.

string 배열을 만든뒤, 입력 순서에 맞게 포켓몬을 저장해주면 됩니다.

 

1번 출력의 경우는 포켓몬의 이름을 통해 번호를 출력해야합니다.

이때 2번에서 만든 string 배열을 사용해 포켓몬을 찾을 경우 시간 초과가 됩니다.

따라서 map을 사용해 포켓몬을 저장한 후 찾아줘야합니다.

		if (pocket.find(Find) != pocket.end()) {
			cout << pocket.find(Find)->second << "\n";
		}
		else {
			cout << orders[stoi(Find)] << "\n";
		}

map 이름을 pocket으로 했습니다. 

찾으려는 포켓몬 이름이 pocket에 저장된 이름 중에 있을 경우 -> 해당 위치의 번호를 출력하는 코드를 만들어주면 됩니다.

만약에 입력으로 들어온 문자열을 찾지 못했다면? -> 이것은 포켓몬의 번호를 나타내는 입력임으로 string 배열에서 해당 번호의 포켓몬 이름을 출력해주면 됩니다.

 

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <string>
#include <cmath>
#include <stack>
#include <map>

using namespace std;

map<string, int> pocket;
string orders[100001];
int N, M;

void solve() {
	for (int i = 1; i <= M; i++) {
		string Find;
		cin >> Find;
		if (pocket.find(Find) != pocket.end()) {
			cout << pocket.find(Find)->second << "\n";
		}
		else {
			cout << orders[stoi(Find)] << "\n";
		}
	}
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	cin >> N >> M;
	for (int i = 1; i <= N; i++) {
		string name;
		cin >> name;
		pocket.insert({ name, i });
		orders[i] = name;
	}
	solve();
	return 0;
}

 

 

질문 및 조언 댓글 남겨주세요!