Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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
Archives
Today
Total
관리 메뉴

hwooo

BOJ (C/C++) 17219번: 비밀번호 찾기 본문

Study/Algorithm

BOJ (C/C++) 17219번: 비밀번호 찾기

hwooo 2023. 5. 21. 10:09

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

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net

 


풀이

map 을 사용.

사실 이걸 몰라서 벡터를 사용해서 사이트의 맨 앞자리 알파벳에 따라 나눠 저장하여 찾았는데 map을 사용한 게 4배 정도 빨랐다.


코드 1

#include <iostream>
#include <string>
#include <map>
using namespace std;

map <string,string> Site;
int main() {
	cin.tie(NULL);
	ios::sync_with_stdio(false);

	int N, M, loc;
	string A, B;
	cin >> N >> M;

	for (int i = 0; i < N; i++) {
		cin >> A >> B;
		Site.insert({ A,B });
	}

	for (int i = 0; i < M; i++) {
		cin >> A;

		auto idx = Site.find(A);
		cout << idx->second << '\n';
	}
	return 0;
}

코드2

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

vector <string> V[52], P[52];
int main() {
	cin.tie(NULL);
	ios::sync_with_stdio(false);

	int N, M, loc;
	string A, B;
	cin >> N >> M;

	for (int i = 0; i < N; i++) {
		cin >> A >> B;

		// 첫글자에 따라 나눠서 벡터에 삽입
		if (A[0] >= 'a') loc = A[0] - 'a';
		else loc = A[0] - 'A' + 26;

		V[loc].push_back(A);
		P[loc].push_back(B);
	}

	for (int i = 0; i < M; i++) {
		cin >> A;

		// find_loc
		if (A[0] >= 'a') loc = A[0] - 'a';
		else loc = A[0] - 'A' + 26;

		auto idx = find(V[loc].begin(), V[loc].end(), A);

		// print
		int a = idx - V[loc].begin();
		cout << P[loc][a] << '\n';
	}
	return 0;
}