⚙️ 알고리즘/기타 문제 & 풀이

[C] 부분집합 여부 판단

dev_zoe 2020. 7. 17. 23:24
반응형

정수 집합 a, b 에 대해서 집합 a 가 집합 b 의 subset 이면 1 아니면 0 을 리턴하는 함수 isSubset 을 정의하라. main 함수에서는 a 를 읽고(크기를 읽은 후 각각의 원소) b 를 같은 방법으로 읽고 a 가 b 의 부분집합이면 1 을 아니면 0 을 출력한다. aSize 와 bSize 는 각각 집합 a 와 b 의 크기이다.

 

입력 : 2

        10 20

        3

        20 30 10

출력: 집합 A는 집합 B의 부분집합이다

 

입력 : 2

        10 20

        3

        10 22 33

출력: 집합 A는 집합 B의 부분집합이 아니다

#include <stdio.h>
#define MAX_SET_SIZE 100

int hasElement(int set[], int size, int element)
{
	int i = 0;
	for (i = 0; i < size; i++)
	{
		if (set[i] == element)
			return 1;
	}
	return 0;
}

// a가 b의 부분집합이면 1 아니면 0을 리턴
int isSubset(int a[], int aSize, int b[], int bSize)
{
	int i, j, count = 0;
	if (aSize > bSize) //aSize가 bSize보다 크면 부분집합이 아님
		return 0;
	else {
		for (i=0; i<aSize; i++) //집합 a의 원소와 집합 b의 원소를 차례대로 비교
			for (j = 0; j < bSize; j++) {
				if (a[i] == b[j])
					count++; //같으면 count+1
			}
	}

	if (count == aSize) //집합 a의 원소와 b의 원소가 같은 개수가 집합 a의 크기가 같으므로 집합 a는 집합 b의 부분집합임
		return 1;
}

int main(int argc, char *argv[]) {
	int i;
	int SetA[MAX_SET_SIZE];
	int SetB[MAX_SET_SIZE];
	int aSize, bSize; //집합 a, b의 크기

	//집합 a의 사이즈와 집합 a 입력
	scanf("%d", &aSize);
	for (i = 0; i < aSize; i++)
		scanf("%d", &SetA[i]);

	//집합 b의 사이즈와 집합 b 입력
	scanf("%d", &bSize);
	for (i = 0; i < bSize; i++)
		scanf("%d", &SetB[i]);

	if (isSubset(SetA, aSize, SetB, bSize))
		printf("집합 A는 집합 B의 부분집합이다\n");
	else
		printf("집합 A는 집합 B의 부분집합이 아니다\n");
}
반응형