관리 메뉴

한다 공부

[C++] 백준 알고리즘 1764번 듣보잡 본문

Algorithm/문제풀이

[C++] 백준 알고리즘 1764번 듣보잡

사과당근 2021. 9. 12. 20:03

들어보지도 못한 사람 명단과

보지도 못한 사람 명단에서

중복되는 사람의 데이터를 찾는거다

 

map set 사용을 배웠기 때문에

이를 이용해보고자 함

 

1764

#include<iostream>
#include<set>
#include<map>

using namespace std;

int main() {
	int n, m;
	map<string, int> name;
	string temp;
	cin >> n >> m;

	while (n--) {
		cin >> temp;
		name[temp] = 1;
	}

	//듣지도(n) 보지도(m) 못한 사람의 명단을 set에 저장
	set<string> output;
	
	while (m--) {
		cin >> temp;
		if (name[temp] == 1)
			output.insert(temp);
	}

	cout << output.size() << '\n';

	for (auto i : output)
		cout << i << '\n';
}

출력하면 잘 나온다.

 

여기서 짚고가고 싶은 부분은 set의 순회이다.

set의 순회는 iterator를 이용해서

 

//set s가 있다 하자
set<int>:: iterator i;
for (i = s.begin(); i != s.end(); i++)
	cout<<*i<<' ';

이와 같이 순회를 해야한다.

그런데 auto를 쓰면 스스로 iterator임을 안다.

for (auto i = s.begin(); i != s.end(); i++)
	cout<<*i<<' ';

위와 같이 쓸 수 있음

이를 향상시키면

for (auto i:s)	cout<<i<<' ';

위와 같이 쓸 수 있다.

 

G

O

O

D

!