백준 1620번 '나는야 포켓몬 마스터 이다솜'
문제 설명
포켓몬의 번호와 포켓몬의 이름을 저장해둔 후, 문제에서 포켓몬의 이름이 주어지면 그 포켓몬의 번호를 출력하고, 포켓몬의 번호가 주어지면 이름을 출력해야 하는 문제이다.
첫 번째 줄에는 포켓몬의 개수 N과 맞추어야 하는 문제 개수 M이 주어지고, 이어서 N줄에 걸쳐 1번부터 N번까지의 포켓몬 이름이 주어진다. 그 후에는 이어서 M줄에 걸쳐 포켓몬의 이름 혹은 번호가 주어진다.
주의할 점
- 포켓몬 개수의 최대범위가 10만이기 때문에, 시간초과에 유의해야 한다.
- 포켓몬 번호는 1번부터 N번까지이다.
코드
#include<iostream>
#include<map>
using namespace std;
map<string,int> s;
map<int,string> s2;
int N, M;
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
for(int i = 0; i<N; i++){
string j;
cin >> j;
s.insert(make_pair(j,i+1));
s2.insert(make_pair(i+1,j));
}
for(int i = 0; i<M; i++){
string x;
cin >> x;
int y = atoi(x.c_str()); //string to int. 변환할 수 없다면 0 반환
if(y){
cout << s2.find(y)->second << '\n';
}
else {
cout << s.find(x)->second << '\n';
}
}
}
디버깅 기록
처음에는 배열이나 vector를 사용하려고 해봤지만 시간초과의 문턱을 넘지 못하여 포기했다.map을 사용하려고 보니 find 멤버 함수는 key값만 사용할 수 있어서 value가 주어지는 경우를 for문으로 처리할까 고민하다가 map을 하나 더 생성하였다.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
백준 10844번, '쉬운 계단 수' 풀이과정 및 코드 / C++, Python (0) | 2021.05.03 |
---|---|
프로그래머스 level 2 '124 나라의 숫자' C++ 풀이 과정 및 코드 (0) | 2021.04.25 |
백준/13458번, 시험 감독(연산)/C++ (0) | 2021.04.19 |
프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기 (0) | 2021.04.16 |
프로그래머스/큰 수 만들기(Greedy)/C++ (0) | 2021.04.13 |