Algorithm

백준 1764번 듣보잡

이무쿤 2020. 1. 1. 09:46
반응형

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

 

1. java와 달리 c++은 string객체에 있어서 내용이 같으면 같은 인스턴스로 봄.

2. vector push_back하면 인덱스 배열로 바로 참조 가능.

간단한 문제였지만 더 간단한 문제인 줄 알았는데 나름 정렬도 필요하고 시간초과 잡기위해 맵도 쓰고 했어야 하는 문제였다.

 

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

using namespace std;


map<string,int> m;
vector<string> vec;
int result = 0;



int main(void)
{
	
	
	
	int N, M;
	cin >> N >> M;
	string str;
	int index = 0;
	
	for(int i = 0; i<N; i++)
	{
		cin >> str;
		m[str] = 1;
	}
	
	for(int j = 0; j <M; j++)
	{
		cin >> str;
		if(m[str])
		{
			result++;
			vec.push_back(str);
			index++;
		}
	}
	
	
	
	sort(vec.begin(),vec.end());
	
	cout << result <<endl;
	for(int i = 0; i<index; i++)
	{
		cout<<vec[i]<<endl;
	}
}
반응형