* 해당 문제 풀이는 '큰돌'님의 문제풀이에서 제가 이해한 부분을 재작성한것입니다
백준 1620 나는야 포켓몬 마스터 이다솜 입니다
문제 해석
우선 실제 문제를 보면 많이 깁니다.. 서론이 조금 길어서 문제 자체가 많이 길어지긴했는데 핵심은 마지막 오박사님의 말을 해석하면됩니다
진정한 포켓몬 마스터가 되기 위해서 도감을 완성시켜야되는데 현재 가지고있는 포켓몬 독마에서 포켓몬 이름을 보면 포켓몬 번호를, 포켓몬 번호를 보면 포켓몬 이름을 말하는 연습을 한다고 나와있습니다
즉 포켓몬이름 - 포켓몬 번호로 이루어진 자료구조와, 포켓몬 번호 - 포켓몬 이름으로 이루어져 있는 자료구조를 사용을 해야됩니다
일반적인 배열을 생각인 났다면 배열에 인덱스는 정수값밖에 입력이 되지 않아 포켓이름-포켓몬 번호로 이루어진 자료구조를 만들수가 없습니다
이러한 키-값 쌍으로 이루어진 자료구조는 대표적으로 map 이 있으며 map을 두개를 사용하여 문제를 풀수있습니다
<string,int> 와 <int,string> 으로 되어있는 map를 만들게됩니다
포켓몬 이름이 다 입력이 되면 포켓몬에 대한 문제가 출제가 되는데 문제는 숫자일수도 있고 문자열 일수도있습니다
그렇기에 입력받은 문제가 숫자인지 문자열인지 파악을 하고, 숫자일 경우 <int,string> map에 찾아서 포켓몬 이름을 출력하고, 문자열일경우 <string,int> map 포켓몬 번호를 출력하면 됩니다
C++에서 대표적으로 문자열인지 숫자인지 파악하는 함수는 atoi() 함수가 있으며 아래와 같이 사용할수있습니다
string temp;
cin >> temp;
atoi(temp.c_str());
만약 temp "1","2"와 같은 문자열이 입력이 되었다면 숫자 1,2를 리턴하게 되고 "test"와 같은 문자열이 들어오면 숫자 0을 리턴하게 됩니다
문제 풀이 순서
1. 포켓몬의 수(N), 문제 갯수(M)을 선업합니다
2. 포켓몬이름(string)-포켓몬번호(int)로 이루어진 map 한개와 포켓몬번호(int)-포켓몬이름(string)으로 이루어진 map 한개를 선언합니다
3. 포켓몬 문제와 포켓몬 이름을 입력받을 문자열 temp변수를 선언합니다
4. 포켓몬의수,문제의 갯수을 입력 받습니다
5. N만큼 순회를 돌며 포켓몬 이름을 입력받고 각 map에 저장을합니다
6. 문제의 갯수만큼 순회를 돌며 문제를 입력받습니다
7. 이때 입력받은 문제가 숫자인지 문자열인지 판단을 하고 위에서 선언한 map들을 사용하여 결과를 출력합니다
작성 코드
#include <bits/stdc++.h>
using namespace std;
//포켓몬의 수, 문제 갯수 선언
int n,m;
//문자열키,정수 배열 맵 선언
map<string,int> mp1;
//정수 키, 문자열 배열 맵 선언
map<int,string> mp2;
//포멧몬 이름 문자열 선언
string temp;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//포켓몬수,문제 갯수 입력
cin >> n >> m;
for(int i = 0; i < n; i++){
//포켓몬 이름을 입력받고 각각 맵에 추가
cin >> temp;
mp1[temp] = (i+1);
mp2[(i+1)] = temp;
}
// 문제 문자열을 정수로 바꾸고, 만약 0일경우
// 문자열,정수 맵에서 찾고, 아닐경우 정수,문자열 맵에서 찾기
for(int i = 0; i < m; i++){
cin >> temp;
int num = atoi(temp.c_str());
if(num == 0){
cout << mp1[temp] << "\n";
}else{
cout << mp2[num] << "\n";
}
}
return 0;
}
'코딩테스트' 카테고리의 다른 글
백준 1213 팰린드롬 만들기(C++) (0) | 2022.11.21 |
---|---|
백준 9375 패션왕 신해빈(C++) (1) | 2022.11.20 |
백준 2559 수열(C++) (0) | 2022.11.17 |
백준 1159 농구 경기(C++) (0) | 2022.11.14 |
백준 2979 트럭주차(C++) (1) | 2022.11.13 |