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

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

코드 설명

처음엔 단순히 2중 포문으로 했는데 시간초과였다.. 1억번 이상 연산하기때문이다.

 

그래서 <unordered_map> c++ stl을 이용하여 해쉬맵 형태로 넣어주고 count()를 이용하여 탐색하였다.

 

 

소스 코드 

#include<iostream>
#include<queue>
#include<unordered_map>
#include<vector>
using namespace std;
int main() {
	unordered_map<string, int> map;
	int N, M;
	cin >> N >> M;

	for (int i = 0; i < N; i++) {
		string abc;
		cin >> abc;
		map.insert({ abc,0 });
	}
	int cnt = 0;
	for (int j = 0; j < M; j++) {
		string a;
		cin >> a;
		if (map.count(a) == 1) {
			cnt++;
		}

	}

	cout << cnt; 

	return 0;
}

+ Recent posts