티스토리 뷰

728x90

문제

총 N개의 문자열로 이루어진 집합 S가 주어진다.

입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.

다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.

다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.

입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

 

출력

첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.

 

코드

#include <iostream>
#include <string>
#include <set>

using namespace std;

int N;
int M;
set<string> S;

int main()
{
	string s;
	int i, cnt = 0;

	cin >> N >> M;
	for (i = 0; i < N; i++)
	{
		cin >> s;
		S.insert(s);
	}
	for (i = 0; i < M; i++)
	{
		cin >> s;
		if (S.find(s) != S.end())
			cnt++;
	}
	cout << cnt << endl;
	return 0;
}

 

먼저 집합 S의 원소에 해당하는 문자열을 모두 저장한다. 이후 M개의 입력에 대해 집합 S의 원소인지 확인하면 된다.

이 문제는 트리 자료구조를 사용하는 문제인데 set은 이진트리로 구현되어 있어 이 문제에 적합하다. M개의 입력에 대해 모든 경우에 집합 S에서 해당 원소가 있는지 확인해야 하는데 트리를 사용하는 경우 탐색 시간이 O(log n)으로 다른 자료구조에 비해 빠르다.

 

링크

 

14425번: 문자열 집합

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

www.acmicpc.net

 

inbdni/Baekjoon

Contribute to inbdni/Baekjoon development by creating an account on GitHub.

github.com

 

728x90
«   2024/11   »
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
공지사항
링크
Total
Today
Yesterday