문제 접근
서문이 굉장히 길었다. 입력부터 읽고 구현하면 된다. vector lib 에 포켓몬의 이름과 번호를 push 하고, 복사한 뒤 sort 해서 문자를 입력 받는다면 binary_search 로 찾았고, 숫자를 입력하면 그냥 바로 출력하도록 구현했다.
문제 코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
vector<pair<string,int>> lib;
vector<pair<string,int>> sorted_lib;
int binary_search(string name, int begin, int end)
{
int mid = (begin+end)/2;
if(name.compare(sorted_lib[mid].first) == 0)
return mid;
else if(name.compare(sorted_lib[mid].first) > 0)
return binary_search(name, mid, end);
else
return binary_search(name, begin, mid);
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, M;
string input, name;
cin>>N>>M;
for(int i=0; i<N; ++i)
{
cin>>name;
lib.push_back(make_pair(name,i+1));
}
sorted_lib=lib;
sort(sorted_lib.begin(), sorted_lib.end());
for(int i=0; i<M; ++i)
{
cin>>input;
if(input[0]>64 && input[0]<91)
cout<<sorted_lib[binary_search(input, 0, sorted_lib.size())].second<<'\n';
else
cout<<lib[atoi(input.c_str())-1].first<<'\n';
}
}
'개발 > 알고리즘' 카테고리의 다른 글
백준 1654번 : 랜선 자르기 (0) | 2020.09.17 |
---|---|
백준 11726번 : 2xn 타일링 (0) | 2020.09.04 |
백준 1463 번 : 1로 만들기 (0) | 2020.09.04 |
[Solved.ac] Gold 입장! (1) | 2020.09.03 |
백준 5719번 : 거의 최단 경로 (1) | 2020.09.03 |