숙제 2 (집합 연산)
두 집합 A, B가 있을 때, A와 B에 모두 속하는 원소의 집합을 A와 B의 교집합이라고 하고, A∩B로나타낸다. 또한 집합 A에 속하거나 B에 속하는 원소의 집합을 A와 B의 합집합이라고 하고, A∪B로 나타낸다. 그리고, 집합 A에는 속하지만 집합 B에는 속하지않는 모든 원소의 집합을 A와 B의 차집합이라고 하고, A-B로 나타낸다. 1 ~ 100 사이의 자연수를 원소로 하는 두 집합이 주어졌을 때, 이 두 집합의 교집합, 합집합, 차집합을 계산하는 프로그램을 작성하시오.
예시:
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
void print_arr(int *arr,int count); //집합출력
void inter_set(int *arr1,int *arr2,int num1, int num2); //교칩합
void union_set(int *arr1, int *arr2,int num1, int num2); //합집합
void dif_set(int *arr1,int *arr2,int num1, int num2); //차집합
int main(){
int num1, num2;
cin>>num1;
int *arr1=new int[num1];
for(int i=0;i<num1;i++) cin>>arr1[i];
cin>>num2;
int *arr2=new int[num2];
for(int i=0;i<num2;i++) cin>>arr2[i];
sort(arr1, arr1+num1);
sort(arr2, arr2+num2);
inter_set(arr1,arr2,num1, num2); //교칩합
union_set(arr1,arr2,num1, num2); //합집합
dif_set(arr1,arr2,num1, num2);
return 0;
}
void print_arr(int *arr, int count){
sort(arr,arr+count);
cout<<count<<' ';
for(int i=0;i<count;i++) cout<<arr[i]<<' ';
cout<<endl;
}
void inter_set(int *arr1,int*arr2,int num1, int num2){
int count=0x00;
int num=0x00;
if(num1>num2) num=num1;
else num=num2;
int*arr=new int[num];
for(int i=0;i<num1;i++){
for(int j=0;j<num2;j++){
if(arr1[i]==arr2[j]) arr[count++]=arr1[i];
}
}
print_arr(arr,count);
}
void union_set(int *arr1, int *arr2,int num1, int num2){
int count=0x00;
int*arr=new int [num1+num2];
int idx=0x00;
for(int i=0;i<num2;i++) arr[count++]=arr2[i];
for(int i=0;i<num1;i++){
idx=0x00;
for(int j=0;j<num2;j++){
if(arr1[i]==arr2[j]) idx++;
}
if(idx==0) arr[count++]=arr1[i];
}
print_arr(arr,count);
}
void dif_set(int *arr1,int *arr2,int num1, int num2){
int count=0x00;
int *arr=new int[num1];
for(int i=0;i<num1;i++){
for(int j=0;j<num2;j++){
if(arr1[i]==arr2[j]) {
count++;
arr1[i]=101;
}
}
}
sort(arr1,arr1+num1);
cout<<num1-count<<' ';
for(int i=0;i<(num1-count)&&arr[i]!=101;i++) cout<<arr1[i]<<' ';
cout<<endl;
}
'코딩테스트' 카테고리의 다른 글
[C++] 행렬 곱셈 (0) | 2021.06.27 |
---|---|
[C++] 행렬 덧셈 (0) | 2021.06.27 |
[C++] 해밍 수 (Hamming Number) (0) | 2021.06.27 |
[C++] 농장 (0) | 2021.06.27 |
[C++] 패리티 비트(Parity Bit) (0) | 2021.06.27 |