티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/1822
1822번: 차집합
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;
int na, nb, a[500001], b[500001];
map<int, int>m;
vector<int>v;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> na >> nb;
for(int i=0; i<na; i++) cin >> a[i];
for(int i=0; i<nb; i++)
{
cin >> b[i];
m[b[i]]++; //집합 B 카운팅
}
for(int i=0; i<na; i++)
{
if(m[a[i]]) continue; //이미 B에서 카운팅되어있으면 스킵
v.push_back(a[i]);
}
sort(v.begin(), v.end()); //증가하는 순서로 출력
cout << v.size() << "\n";
for(int i=0; i<v.size(); i++) cout << v[i] << " ";
return 0;
}
먼저 B에 대한 내용을 입력받고, map을 이용하여 카운팅해준다.
만약 A에 대해 map을 이용하여 해당 Key에 대한 Value가 있다면 이는 B에서 이미 카운팅했다는 의미이므로 패스한다.
Value가 없다면 새로운 값이므로 따로 벡터에 저장한다.
문제에 주어진 조건에 따라 벡터를 정렬하고, 크기와 내용을 출력해주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 20291번] 파일 정리 (C++) (0) | 2024.04.06 |
---|---|
[백준 1755번] 숫자놀이 (C++) (0) | 2024.04.05 |
[백준 15688번] 수 정렬하기 5 (C++) (0) | 2024.04.03 |
[백준 5635번] 생일 (C++) (0) | 2024.04.02 |
[백준 19621번] 회의실 배정 2 (C++) (0) | 2024.04.01 |