algorithm'''problem solve
[백준]1620-나는야 포켓몬 마스터 이다솜(설명X, Binary search)
JunHwa Park
2020. 2. 4. 12:33
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <algorithm> #include <cstring> using namespace std; bool is_front(pair<char*, int> pair1, pair<char*, int> pair2) { for (size_t i = 0; i < 21; i++) { if (pair1.first[i] > pair2.first[i]) return false; else if (pair1.first[i] < pair2.first[i]) return true; } return true; } int main() { int N, M; scanf("%d %d", &N, &M); pair<int, char*>* num_pair = new pair<int, char*>[N + 1]; pair<char*, int>* str_pair = new pair<char*, int>[N + 1]; for (size_t i = 1; i <= N; i++) { str_pair[i].first = new char[21]; str_pair[i].second = i; scanf("%s", str_pair[i].first); num_pair[i] = { i, str_pair[i].first }; } sort(str_pair + 1, str_pair + N + 1, is_front); for (size_t i = 0; i < M; i++) { char input[21] = { 0, }; scanf("%s", &input); if (isdigit(input[0])) printf("%s\n", num_pair[(atoi(input))].second); else { int min = 1, max = N, ans = 0; while (max >= min) { int mid = (max + min) / 2; int diff = strcmp(input, str_pair[mid].first); if (diff == 0) { ans = str_pair[mid].second; break; } else if (diff > 0) min = mid + 1; else max = mid - 1; } printf("%d\n", ans); } } return 0; } | cs |