본문 바로가기

algorithm

백준 1764번 듣보잡

 

#include <iostream>
#include <map>

using namespace std;

map<string, int> hear;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0);

	int n, m;
	int count = 0;
	string value;

	cin >> n >> m;

	for (int i = 0; i < n; i++) {
		cin >> value;
		hear.insert({ value, 0 });
	}
	
	for (int i = 0; i < m; i++) {
		cin >> value;
		if (hear.find(value) != hear.end()) {
			count++;
			hear[value]++;
		}
	}

	cout << count << "\n";

	for (map<string, int>::iterator iter = hear.begin(); iter != hear.end(); iter++) {
		if (iter->second > 0) {
			cout << iter->first << "\n";;
		}
	}

	return 0;
}

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

 

아이디어:

1. 일반적인 배열은 시간복잡도가 높아 map(O(logn))과 find를 사용

2. map의 반복자 iter를 사용해서 순환