<<문제>>
https://www.acmicpc.net/problem/1620
<<풀이>>
map에 key value로만 저장해서는 도저히 value값으로 key값을 찾아낼 방법을 생각하지 못해서
그냥 array에 도감 순서대로 포켓몬 이름을 또 저장하는 방법을 사용했습니다.
문제를 해결하는 과정에서 입력받는 정보가 정수인지 문자열인지 사전에 알지 못하기 떄문에
일단 문자열로 입력받고 첫글자의 아스키코드가 어디 범위에 위치하는지에 따라 문자열과 숫자로 구분했습니다.
<<코드>>
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
/* BaekJoon_1620 : 나는야 포켓몬 마스터 이다솜
첫번째 입력 : N(도감에 등록된 포켓몬의 개수), M(문제의 개수)
1<= N,M <= 100,000
두번째 입력 : 도감 채우기 n개의 포켓몬 이름(2 ~ 20)을 입력
문제들을 문자열로 입력을 받고
첫 글자의 ascii 코드 값이 숫자 범위(48~57)이라면 숫자로,
대문자 범위(65~90)라면 문자로 인식하자
*/
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int numN, numM;
cin >> numN >> numM;
vector<string> pokeDex; // 포켓몬 도감
pokeDex.push_back("0"); // 도감이 1부터 시작하므로
map<string, int> pokeDexSorted;
// 도감에 포켓몬을 저장
for (int i = 0; i < numN; i++) {
string pokeName;
cin >> pokeName;
pokeDex.push_back(pokeName);
pokeDexSorted.insert({ pokeName, i + 1});
}
string input;
int head; // 입력이 숫자인지 문자열인지를 알기위해서 첫 글자의 ascii code를 이용
for (int i = 0; i < numM; i++) {
cin >> input;
head = int(input[0]);
if (48 <= head && head <= 57) { // 입력이 숫자인 경우
cout << pokeDex[stoi(input)] << "\n";
}
else if (65 <= head && head <= 90) { // 입력이 문자열인 경우
cout << pokeDexSorted[input]<< "\n";
}
}
}
<<깃헙>>
https://github.com/J2on/BaekjoonOnlineJudge/blob/master/V2/BaekJoon_1620
< 백준 BaekJoon : 1764번 듣보잡> C++ (0) | 2022.08.15 |
---|---|
< 백준 BaekJoon : 10816번 숫자 카드2> C++ (0) | 2022.08.15 |
< 백준 BaekJoon : 25305번 커트라인> C++ (0) | 2022.08.10 |
< 백준 BaekJoon : 25304번 영수증> C++ (0) | 2022.08.07 |
< 백준 BaekJoon : 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰> C++ (0) | 2022.08.07 |
댓글 영역