이번 문제는 집합 자료를 사용하면 쉽게 풀리는 문제입니다.

문제는 들어본 적이 없는 사람들의 리스트와 본적 없는 사람들의 리스트가 주어졌을 때, 듣보잡(들어보지도, 본적도 없는) 리스트를 구하는 것입니다. 그런데, 최종 리스트는 사전순으로 배열해야 합니다.
가장 간단한 방법을 두 집합을 만들고, 그 집합의 교집합을 구하는 방법이겠죠. 정렬된 리스트를 만들고 교집합을 만들면 알고리즘 효율은
저는 두개의 집합을 이용했습니다. 첫번째는 해시집합이고, 두번째는 정렬집합입니다. 해시집합은 정렬되지는 않았지만, 삽입, 검색이 모두
처음 들어보지 못한 집합을 만들 때에는 해시집합을 이용했습니다. 해시집합을 만드는 알고리즘 효율은
집합 자료 구조는 해시 집합(unordered set)과 정렬 집합(ordered set)이 있다는 점을 알면 좋을 듯 합니다. 해시 집합이
제가 작성한 소스입니다. 소스는 참고용으로 봐주세요.
//-----------------------------------------------
// baekjoon #1764
// - by Aubrey Choi
// - created at 2019-10-09
//-----------------------------------------------
#include <stdio.h>
#include <unordered_set>
#include <set>
#include <string>
int main()
{
std::unordered_set<std::string> s1;
std::set<std::string> s2;
int n, m;
char name[24];
scanf("%d%d",&n,&m);
while(n--) { scanf("%s", name); s1.insert(name); }
while(m--) { scanf("%s", name); if(s1.find(name)!=s1.end()) s2.insert(name); }
printf("%lu\n", s2.size());
for(auto k : s2) printf("%s\n", k.c_str());
}
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1769 3의 배수(구현) (5) | 2022.10.15 |
---|---|
[C/C++] 백준 #1766 문제집(위상정렬) (2) | 2022.10.15 |
[C/C++] 백준 #1761 정점들의 거리(최소 공통 조상) (0) | 2022.10.11 |
[C/C++] 백준 #1759 암호 만들기(조합) (0) | 2022.10.11 |
[C/C++] 백준 #1758 알바생 강호(탐욕) (0) | 2022.10.11 |
댓글