-
[Baekjoon(백준)][1620번] 나는야 포켓몬 마스터 이다솜(C++)2024년 01월 25일
- 유니얼
-
작성자
-
2024.01.25.:46
728x90안녕하세요! 오늘은 코딩테스트 문제 중 하나인 "나는야 포켓몬 마스터 이다솜" 문제를 해결하는 방법에 대해 설명하려고 합니다. 이 문제에서는 포켓몬 도감에 수록된 포켓몬의 이름을 번호로, 번호를 이름으로 빠르게 변환하여 출력하는 프로그램을 작성해야 합니다. 문제를 해결하는 과정과 코드를 자세히 알아보겠습니다.
문제링크:
https://www.acmicpc.net/problem/1620
문제 개요
이 문제에서는 포켓몬 도감에 수록된 포켓몬의 이름을 번호로, 번호를 이름으로 빠르게 변환하여 출력하는 프로그램을 작성해야 합니다. 포켓몬 도감에는 N개의 포켓몬이 수록되어 있고, M개의 질문에 대해 답해야 합니다. 질문은 포켓몬의 이름 또는 번호로 주어집니다.
해결 방법
이 문제를 해결하기 위해 map 자료구조를 두 개 사용합니다. 하나는 포켓몬의 번호를 키로 하고 이름을 값으로 저장하는 map<int, string> 형태의 자료구조이고, 다른 하나는 포켓몬의 이름을 키로 하고 번호를 값으로 저장하는 map<string, int> 형태의 자료구조입니다. 이를 통해 이름과 번호 간 변환을 효율적으로 수행할 수 있습니다.
코드 구현
#include <iostream> #include <vector> #include <map> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M = 0; cin >> N >> M; // 포켓몬 수와 질문 수 입력 받기 map<int, string> poketNames; // 번호로 이름 찾기 위한 맵 map<string, int> poketIndexs; // 이름으로 번호 찾기 위한 맵 string temp = ""; for (int i = 1; i <= N; i++) { cin >> temp; poketNames[i] = temp; // 번호에 해당하는 포켓몬 이름 저장 poketIndexs[temp] = i; // 포켓몬 이름에 해당하는 번호 저장 } vector<string> questions; // 질문 목록 string question; for (int i = 0; i < M; i++) { cin >> question; // 질문 입력 받기 questions.push_back(question); // 질문 목록에 추가 } for (int i = 0; i < questions.size(); i++) { int index = atoi(questions[i].c_str()); // 질문을 정수로 변환 if (index > 0) { // 질문이 숫자인 경우 cout << poketNames[index] << "\n"; // 번호에 해당하는 포켓몬 이름 출력 } else { // 질문이 문자인 경우 cout << poketIndexs[questions[i]] << "\n"; // 이름에 해당하는 포켓몬 번호 출력 } } }
코드 설명
본 코드는 주어진 포켓몬 도감의 정보를 두 개의 map에 저장하여 관리합니다. 질문이 들어오면, 해당 질문이 숫자인지 문자인지를 판별하여 적절한 map에서 정보를 검색해 답을 출력합니다.
결론
"나는야 포켓몬 마스터 이다솜" 문제는 map을 활용하여 효과적으로 해결할 수 있습니다. 이 문제는 map의 기본적인 사용법과 문자열 처리, 조건 판별 능력을 평가합니다.
반응형다음글이전글이전 글이 없습니다.댓글