[Algorithm #09] 1620 - 나는야 포켓몬 마스터 이다솜 (C++)

이석환·2023년 4월 29일

Algorithm

목록 보기
10/16

문제 설명

  1. 도감에 수록되어 있는 포켓몬의 개수 N과 맞춰야 하는 문제의 개수 M이 입력으로 주어진다.
  2. N개의 포켓몬을 입력받는다. 그리고 맞추고자 하는 포켓몬을 M개 입력받는다.
  3. 입력으로 숫자가 들어온다면 해당하는 포켓몬의 이름, 문자가 들어오면 해당하는 번호를 출력한다.


  • 문제에 사진이 너무 많아서 추가 사진은 생략했습니다.

문제 해결 전략

  1. map을 이용하여 포켓몬의 번호와 이름을 저장하면 된다.
  2. 여기서 map은 2개를 사용한다.
  • 포켓몬 이름을 key로 가지는 map, 번호를 key로 가지는 map
  1. 이 후 M번만큼 반복문을 돌며 string으로 찾고자하는 포켓몬을 입력받는다.
  • 여기서 string으로 입력받은 이유는 포켓몬의 이름과 번호를 입력받는 경우이기 때문이다.
  1. string은 index로 접근이 가능하기 때문에 숫자로 입력하는 경우 0번째는 무조건 숫자이기 때문에 isdigit으로 판단한다. 그리고 숫자가 맞을 경우 stoi() 함수를 통해 정수로 바꾸어 준다.
  2. 결과값을 출력
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

map<string, int> dogam1;
map<int, string> dogam2;

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N, M;
    string one;
    string findone;
    int num;
    cin >> N >> M;
    for (int i = 1; i <= N; i++) {
        cin >> one;
        dogam1[one] = i;
        dogam2[i] = one;
    }

    for (int i = 0; i < M; i++) {
        cin >> findone;
        if (isdigit(findone[0])) {
            cout << dogam2[stoi(findone)] << "\n";
        } else {
            cout << dogam1[findone] << "\n";
        }
    }
    return 0;
}

소감

map 2개 쓴다는 생각을 바로 했으면 5분 안에 끝나는 문제
매우 쉬움

출처 : https://www.acmicpc.net/problem/1620

profile
반갑습니다.

0개의 댓글