반응형
정수 집합 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");
}
반응형
'⚙️ 알고리즘 > 기타 문제 & 풀이' 카테고리의 다른 글
[C] 문자열을 입력받아 첫 번째로 등장하는 단어 출력 (0) | 2020.07.18 |
---|---|
[C] 문자열 병합 (0) | 2020.07.18 |
[C] 사방의 값 채우기(지뢰찾기 변형) (0) | 2020.07.17 |
[C] 3X3 게임판의 Tic-Tac-Toe (0) | 2020.07.17 |
[C] 간단한 지뢰찾기(지뢰의 개수 출력) (0) | 2020.07.17 |