c++

백준 c++ 1620 문제 풀이

psb08 2025. 5. 11. 14:25
728x90
반응형

문제 링크 : 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