Little Jay

[C++] 백준 1620 - 나는야 포켓몬 마스터 이다솜 본문

알고리즘/BOJ

[C++] 백준 1620 - 나는야 포켓몬 마스터 이다솜

Jay, Lee 2021. 8. 17. 15:34

hash_table로 풀려고 했지만 채점서버에서 내 코드를 읽지 못해서

vector의 pair기능을 활용해서 다시 풀었다

이것 때문에 많이 문제를 채점해서 좀 그렇다

vector을 두개 사용했는데,

첫 번째 벡터는 바로 번호만 넣으면 출력이 되도록하는 도감으로 만들었고,

두 번째 벡터는 pair을 사용해서 이름과 번호를 같이 넣어서 sort해준 다음

이름순으로 정렬해서 이분탐색하여 찾았다.

 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0);

	int n, m;
	cin >> n >> m;

	vector<string> v1(n + 1);
	vector<pair<string, int>> v2;
	v1.push_back(" ");

	for (int i = 1; i <= n; i++) {
		cin >> v1[i];
	}
	for (int i = 0; i < n; i++) {
		v2.push_back({ v1[i + 1], i + 1 });
	}

	sort(v2.begin(), v2.end());

	for (int i = 0; i < m; i++) {
		string s;
		cin >> s;
		if (isdigit(s[0]))
			cout << v1[stoi(s)] << "\n";
		else {
			int low = 0, high = n - 1;

			while (low <= high) {
				int mid = (low + high) / 2;
				if (v2[mid].first == s) {
					cout << v2[mid].second << "\n";
					break;
				}
				else if (v2[mid].first > s)
					high = mid - 1;
				else
					low = mid + 1;
			}
		}
	}


	return 0;
}

'알고리즘 > BOJ' 카테고리의 다른 글

[C++] 백준 7568번 - 덩치  (0) 2021.08.17
[C++] 백준 1764번 - 듣보잡  (0) 2021.08.17
[C++] 백준 11659 - 구간 합 구하기 4  (0) 2021.08.16
[C++] 백준 11399번 - ATM  (0) 2021.08.16
[C++] 백준 1463번 - 1로 만들기  (0) 2021.08.16
Comments