ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

1. ๋น„ํŠธ๋ฒกํ„ฐ ์‚ฌ์šฉํ•ด ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ฒ€์‚ฌํ•˜๊ธฐ

 

 

์ฝ”๋“œ:

#include <stdio.h>
#include<string.h>

int subset(unsigned int A, unsigned int B) {// ์ง‘ํ•ฉ A๊ฐ€ ์ง‘ํ•ฉ B์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ์ง€ ๊ฒ€์‚ฌ
	if ((A | B) == B) // A or B๊ฐ€ B๋ผ๋ฉด A๋Š” B์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ž„
    	return 1; // ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ฉด 1๋ฐ˜ํ™˜
	else
		return 0; // ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด 0๋ฐ˜ํ™˜
}

int main() {
	char Aset[100], Bset[100]; // ์ง‘ํ•ฉ Aset๊ณผ ์ง‘ํ•ฉ Bset์„ charํ˜•์œผ๋กœ ์„ ์–ธ
	int lenA, lenB; // ๊ฐ ์ง‘ํ•ฉ์˜ ๊ธธ์ด ์ €์žฅํ•  ๋ณ€์ˆ˜
	unsigned int A = 0, B = 0; // ์Œ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ํ•„์š” ์—†์œผ๋‹ˆ๊นŒ unsigned ์ž๋ฃŒํ˜• ์‚ฌ์šฉ
	
	gets(Aset); //์ง‘ํ•ฉ A์ž…๋ ฅ ๋ฐ›๊ณ 
	lenA = strlen(Aset); // ๊ธธ์ด ๊ณ„์‚ฐ
	if (Aset[0] != '0') {// ๊ณต์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด
		for (int i = 0; i < lenA; i++) {
			A = A | (1 << (Aset[i] - 'A'));// A์— ๋ฌธ์ž-'A'ํ•ด์ค€ ๊ฐ’์„ left shiftํ•ด์ค˜์„œ orํ•˜๊ธฐ(๋น„ํŠธ๋ฒกํ„ฐ๋กœ ๋ฐ”๊พธ๊ธฐ)
		}
	}

	gets(Bset); //B๋„ ๋˜‘๊ฐ™์ด ๋ฐ›๊ณ 
	lenB = strlen(Bset);
	if (Bset[0] != '0') {
		for (int i = 0; i < lenB; i++) {
			B = B | (1 << (Bset[i] - 'A'));// ๋น„ํŠธ๋ฒกํ„ฐ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ
		}
		printf("%d\n", subset(A, B));// ํ•จ์ˆ˜ ํ˜ธ์ถœํ•ด์„œ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ์ถœ๋ ฅ
	}
	else
		printf("1");// B๊ฐ€ ๊ณต์ง‘ํ•ฉ์ด๋ผ๋ฉด ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋ณด๊ณ  ์ถœ๋ ฅ(๊ทผ๋ฐ A๊ฐ€ ๋ถ€๋ถ„์ง‘ํ•ฉ ์•„๋‹ ๋•Œ๋„ ์ƒ๊ฐํ•ด์ค˜์•ผ๋˜๋Š”๋ฐ ์ƒ๊ฐ์•ˆํ–ˆ๋„ค ์ด์ œ๋ณด๋‹ˆ๊นŒ)

	return 0;
}

**๋น„ํŠธ๋ฒกํ„ฐ ์–ด์ผ€ํ•˜๋Š”์ง€ ๋ชฐ๋ผ์„œ ์กด๋‚˜ ํ—ค๋งธ์Œ........ ๋น„ํŠธ์—ฐ์‚ฐ์ž ๊ณต๋ถ€ํ•˜์ž

 

 

2. ํ•ฉ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋น„ํŠธ๋ฒกํ„ฐ๋กœ ์ž‘์„ฑํ•˜๊ธฐ

 

์ฝ”๋“œ: 

#include <stdio.h>
#include<string.h>

void _union(int bit1[], int bit2[]) {
	int arr[26];

	int cnt1 = 0;
	int cnt2 = 0;
	for (int i = 0; i < 26; i++) {
		if (bit1[i] != 0)
			cnt1++;
	}
	for (int i = 0; i < 26; i++) {
		if (bit2[i] != 0)
			cnt2++;
	}

	if (cnt1 == 0 && cnt2 == 0) {
		printf("0");
	}
	else {
		for (int i = 0; i < 26; i++) {
			if (bit1[i] == 1) {
				arr[i] = 1;
			}
			if (bit2[i] == 1) {
				arr[i] = 1;
			}
		}

		for (int i = 0; i < 26; i++) {
			if (arr[i] == 1) {
				printf("%c", ('A' + i));
			}
		}
	}
}

void intersect(int bit1[], int bit2[]) {
	int arr[26];

	int flag = 0;
	int cnt1 = 0;
	int cnt2 = 0;
	for (int i = 0; i < 26; i++) {
		if (bit1[i] != 0)
			cnt1++;
	}
	for (int i = 0; i < 26; i++) {
		if (bit2[i] != 0)
			cnt2++;
	}

	if (cnt1 == 0 || cnt2 == 0) {
		printf("0");
	}
	else {
		for (int i = 0; i < 26; i++) {
			if (bit1[i] == 1 && bit2[i] == 1) {
				arr[i] = 1;
				flag++;
			}
		}

		if (flag == 0)
			printf("0");
		else {
			for (int i = 0; i < 26; i++) {
				if (arr[i] == 1) {
					printf("%c", ('A' + i));
				}
			}
		}
	}
}

int main() {
	char Aset[100], Bset[100];
	int lenA, lenB;
	int i = 0;
	int bit1[26] = { 0 }, bit2[26] = { 0 };
	
	gets(Aset);
	lenA = strlen(Aset);
	if (Aset[0] != '0') {
		for (int i = 0; i < lenA; i++) {
			bit1[Aset[i] - 'A'] = 1;
		}
	}

	gets(Bset);
	lenB = strlen(Bset);
	if (Bset[0] != '0') {
		for (int i = 0; i < lenB; i++) {
			bit2[Bset[i] - 'A'] = 1;
		}
	}

	_union(bit1, bit2);
	printf("\n");
	intersect(bit1, bit2);

	return 0;
}

 

๋ฐ˜์‘ํ˜•