Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 1620 - 나는야 포켓몬 마스터 이다솜(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/1620
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;
}
질문 및 조언 댓글 남겨주세요!
'백준' 카테고리의 다른 글
백준 1541 - 잃어버린 괄호(C++) (0) | 2022.02.11 |
---|---|
백준 9375 - 패션왕 신해빈(C++) (0) | 2022.02.11 |
백준 17822 - 원판 돌리기(C++) (0) | 2022.02.05 |
백준 15685 - 드래곤 커브(C++) (0) | 2022.02.03 |
백준 19236 - 청소년 상어(C++) (0) | 2022.01.31 |