N과 M의 제한이 50만이기 때문에
정렬을 사용하지 않고
STL의 set을 사용했다.
set<string>을 사용하여 입력과 동시에 정렬이 가능하게 하였다.
우선 듣지 못한 사람, 모두를 set<string> s에 넣고
본적 없는 사람이, 들어보지도 못했다면
if(s.find() != s.end())
set<string> ans에 insert시키는 방식이다.
출처 : https://www.acmicpc.net/problem/1764
문제
김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.
출력
듣보잡의 수와 그 명단을 사전순으로 출력한다.
예제 입력 1
3 4 ohhenrie charlie baesangwook obama baesangwook ohhenrie clinton
예제 출력 1
2 baesangwook ohhenrie
소스코드
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 | #include<iostream> #include<set> #include<string> using namespace std; int main(void) { int n, m; set<string> s; set<string> ans; cin >> n >> m; while (n--) { string name; cin >> name; s.insert(name); } while (m--) { string name; cin >> name; auto it = s.find(name); if (it != s.end()) ans.insert(name); } cout << ans.size() << '\n'; set<string>::iterator iter; for (iter = ans.begin(); iter != ans.end(); iter++) { cout << *iter << '\n'; } return 0; } | cs |
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
'알고리즘 > 백준' 카테고리의 다른 글
[백준 9093] 단어 뒤집기 (cpp, stack) (0) | 2021.12.12 |
---|---|
[백준 10828] 스택 (cpp, stack) (0) | 2021.12.12 |
[백준 7785] 회사에 있는 사람 (0) | 2019.05.17 |
[백준 1927] 최소 힙 (0) | 2019.05.13 |
댓글