본문 바로가기

알고리즘/백준 문제풀기

BOJ 백준 1764 듣보잡 <문자열 처리>

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


< 듣보잡 >


듣도 못한 단어들과 보도 못한 단어들을 입력 받고 공통된 단어들을 사전 순으로 출력해주면 되는 문제이다.


1. 듣도 못한 단어들을 입력 받는다.


2. 듣도 못한 단어들을 저장한 배열을 sort한다.


3. 보도 못한 단어들을 입력받으면서 듣도 못한 배열에 존재하는지 이진탐색을 한다.


4. 이진 탐색 결과가 존재하는 경우 result 배열에 넣어준다.


5. result 배열을 sort해준 뒤 출력해준다.


* binary_search는 값이 존재하는 경우 true, 존재하지 않는다면 false를 리턴해준다.


* set의 find는 찾는 값이 없을 시 end()를 리턴한다.




* Vector를 이용한 풀이


#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

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

	vector<string> v;
	vector<string> result;

	for (int i = 0; i < n; ++i)
	{
		string s;
		cin >> s;
		v.push_back(s);
	}

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

	int cnt = 0;

	for (int i = 0; i < m; ++i)
	{
		string s;
		cin >> s;
		if (binary_search(v.begin(), v.end(), s)) {
			result.push_back(s);
			cnt++;
		}

	}
	cout << cnt << '\n';
	sort(result.begin(), result.end());
	for (string s : result)
		cout << s << '\n';

	return 0;
}

Set을 이용한 풀이

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

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

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

	set<string> v;
	set<string> result;

	for (int i = 0; i < n; ++i)
	{
		string s;
		cin >> s;
		v.insert(s);
	}

	int cnt = 0;

	for (int i = 0; i < m; ++i)
	{
		string s;
		cin >> s;
		if (v.find(s) != v.end()) {
			result.insert(s);
			cnt++;
		}

	}
	cout << cnt << '\n';

	for (string s : result)
		cout << s << '\n';

	return 0;
}