문제 : https://www.acmicpc.net/problem/17219


[ 알고리즘풀이 ]

 Binary Search 를 이용하면 O(NlogN + MlogN) 복잡도로 문제를 해결할 수 있습니다.

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

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int N, M;
	cin >> N >> M;
	string A, B;
	vector<pair<string, string>> v;
	for (int i = 0; i < N; i++) {
		cin >> A >> B;
		v.push_back(make_pair(A, B));
	}
	sort(v.begin(), v.end());
	for (int i = 0; i < M; i++) {
		cin >> A;
		int left = 0, right = N - 1;
		while (left <= right) {
			int mid = (left + right) / 2;
			if (v[mid].first == A){
				cout << v[mid].second << '\n';
				break;
			}
			else if (v[mid].first < A) {
				left = mid + 1;
			}
			else
				right = mid - 1;
		}
	}
	return 0;
}

 

+ Recent posts