본문 바로가기

코딩테스트

[C++] 집합 연산

숙제 2 (집합 연산)

집합 A, B있을 , AB모두 속하는 원소의 집합을 AB교집합이라고 하고, AB나타낸다. 또한 집합 A속하거나 B속하는 원소의 집합을 AB합집합이라고 하고, A∪B나타낸다. 그리고, 집합 A에는 속하지만 집합 B에는 속하지않는 모든 원소의 집합을 AB차집합이라고 하고, 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