Problem
https://www.acmicpc.net/problem/1764
듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하시오.
Solution
#include<iostream>
#include<string>
#include<unordered_map>
#include<set>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
unordered_map<string, int> list; // key-value 쌍
set<string> ans; // 중복 비허용 정답 명단
string s; // key값
int n, m;
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> s;
list[s]++;
}
for(int i=0;i<m;i++){
cin >> s;
if (list[s]!=0){
ans.insert(s);
}
}
cout << ans.size() << '\n';
for(auto i: ans) cout << i << '\n';
return 0;
}
unordered map과 set를 이용하여 풀이하였다. 먼저 key-value 자료형이 string, int인 unordered map를 생성한다. string 타입의 이름이 입력될 때마다 int 타입의 수가 늘어난다. 위 코드에서 int 타입의 수가 0이라는 것은 명단에 처음 들어오는 이름이라는 뜻으로, 중복되는 이름이 있다는 것을 의미한다. 이렇게 구해진 듣도 보도 못한 이름은 중복을 허용하지 않는 set에 입력되고 유일한 값으로 출력된다.
Reference
https://blockdmask.tistory.com/79
'코딩 테스트 > 백준 (C++, Python)' 카테고리의 다른 글
cpp) 백준 2805: 나무 자르기 (0) | 2023.06.27 |
---|---|
cpp) 백준 13305: 주유소 (0) | 2023.06.27 |
cpp) 백준 10816: 숫자 카드 2 (2) | 2023.06.17 |
cpp) 백준 1920: 수 찾기 (0) | 2023.06.15 |
cpp) 백준 10866: 덱 (0) | 2023.06.14 |