문제 링크 : https://www.acmicpc.net/problem/1620
목차
1. 설명
2. 내 코드
3. 문제 풀이 해석 내용
4. 실행 결과
설명
백준 실버 4 문제 입니다.
문제명 : 나는야 포켓몬 마스터 이다솜
내 코드
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
map<int, string> intToString = map<int, string>();
map<string, int> stringToInt = map<string, int>();
cin >> n >> m;
for (int i = 1; i <= n; ++i)
{
string name;
cin >> name;
intToString[i] = name;
stringToInt[name] = i;
}
for (int i = 0; i < m; ++i)
{
string str;
cin >> str;
if (isdigit(str[0]))
{
int num = stoi(str);
cout << intToString[num] << '\n';
}
else
cout << stringToInt[str] << '\n';
}
}
문제 풀이 해석 내용
변수 선언 및 맵 초기화
int n, m;
map<int, string> intToString = map<int, string>();
map<string, int> stringToInt = map<string, int>();
int n;: 도감에 등록될 포켓몬의 개수를 저장합니다.
int m;: 처리할 질의(이름 또는 번호)의 개수를 저장합니다.
map<int, string> intToString = map<int, string>();: 정수를 키로, 문자열(이름)을 값으로 저장하는 맵 intToString을 선언합니다. 번호를 알 때 이름을 찾을 때 사용합니다.
map<string, int> stringToInt = map<string, int>();: 문자열(이름)을 키로, 정수(번호)를 값으로 저장하는 맵 stringToInt를 선언합니다. 이름을 알 때 번호를 찾을 때 사용합니다.
도감 정보 입력 및 맵에 저장
cin >> n >> m; // 포켓몬 개수 n, 질의 개수 m 입력
for (int i = 1; i <= n; ++i) // n개 포켓몬 정보 입력 및 저장
{
string name;
cin >> name; // 포켓몬 이름 입력
intToString[i] = name; // 번호 i에 해당하는 이름을 intToString 맵에 저장
stringToInt[name] = i; // 이름 name에 해당하는 번호 i를 stringToInt 맵에 저장
}
cin >> n >> m;: 포켓몬의 총 개수 n과 처리할 질의의 개수 m을 입력받습니다.
for 루프는 1부터 n까지 반복하며 각 포켓몬 정보를 입력받습니다.
string name; cin >> name;: 포켓몬 이름을 문자열 name에 입력받습니다.
intToString[i] = name;: 현재 번호 i를 키로, 입력받은 이름 name을 값으로 하여 intToString 맵에 저장합니다.
stringToInt[name] = i;: 입력받은 이름 name을 키로, 현재 번호 i를 값으로 하여 stringToInt 맵에 저장합니다.
질의 처리 및 결과 출력 루프
for (int i = 0; i < m; ++i) // m번 반복 (질의 개수만큼)
{
string str;
cin >> str; // 질의(이름 또는 번호) 입력
if (isdigit(str[0])) // 입력된 질의의 첫 문자가 숫자인지 확인
{
int num = stoi(str); // 문자열을 정수로 변환
cout << intToString[num] << '\n'; // 번호에 해당하는 이름 출력
}
else // 입력된 질의의 첫 문자가 숫자가 아니면 (이름)
cout << stringToInt[str] << '\n'; // 이름에 해당하는 번호 출력
}
for 루프는 m번 반복하며 각 질의를 처리합니다.
string str; cin >> str;: 질의(포켓몬 이름 또는 번호)를 문자열 str에 입력받습니다.
isdigit(str[0]): 입력된 문자열 str의 첫 번째 문자(str[0])가 숫자인지 확인합니다.
이 조건을 통해 질의가 번호인지 이름인지 판단합니다.
질의가 번호인 경우 (첫 문자가 숫자):
int num = stoi(str);: 문자열 str을 정수 num으로 변환합니다.
cout << intToString[num] << '\n';: intToString 맵에서 num을 키로 사용하여 해당하는 포켓몬 이름을 찾아서 출력합니다.
질의가 이름인 경우 (첫 문자가 숫자가 아님):
cout << stringToInt[str] << '\n';: stringToInt 맵에서 str (포켓몬 이름)을 키로 사용하여 해당하는 번호를 찾아서 출력합니다.
실행 결과

'c++' 카테고리의 다른 글
| 백준 c++ 1764 문제 풀이 (0) | 2025.05.13 |
|---|---|
| 백준 c++ 14425 문제 풀이 (0) | 2025.05.12 |
| 백준 c++ 10815 문제 풀이 (0) | 2025.05.10 |
| 백준 c++ 5430 문제 풀이 (0) | 2025.05.09 |
| 백준 c++ 18258 문제 풀이 (0) | 2025.05.08 |