kunkunwoo@blog:~$ 거누권의 생각깜지

백준 11723번 _ 집합

· 배운 것 · 3분 읽기

https://www.acmicpc.net/problem/11723

11723번: 집합

풀이방법

비트연산만 할줄안다면 풀수있다.

void add(int x)
{
	S |= (1 << x);
}

void remove(int x)
{
	S &= ~(1 << x);
}

void check(int x)
{
	if (S & (1 << x))
		cout << 1 << '\n';
	else
		cout << 0 << '\n';
}

void toggle(int x)
{
	S ^= (1 << x);
}

void all()
{
	S = ((1 << 21) - (1 << 0));
}

void empty()
{
	S = 0;
}

전체코드

#include <iostream>
#include <bitset>

using namespace std;

unsigned int S;
int M;

void add(int x)
{
	S |= (1 << x);
}

void remove(int x)
{
	S &= ~(1 << x);
}

void check(int x)
{
	if (S & (1 << x))
		cout << 1 << '\n';
	else
		cout << 0 << '\n';
}

void toggle(int x)
{
	S ^= (1 << x);
}

void all()
{
	S = ((1 << 21) - (1 << 0));
}

void empty()
{
	S = 0;
}

void Run(string order, int x)
{
	//두번째 글자가 겹치는게 없길래 그걸로 switch문 함
	switch (order[1])
	{
	case 'd':
		add(x);
		break;
	case 'e':
		remove(x);
		break;
	case 'h':
		check(x);
		break;
	case 'o':
		toggle(x);
		break;
	case 'l':
		all();
		break;
	case 'm':
		empty();
		break;
	}
}

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	cin >> M;

	string order;
	int x = 0;
	for (int i = 0; i < M; i++)
	{
		cin >> order;

		if (!(order == "all"  ||  order == "empty"))
			cin >> x;

		Run(order, x);
	}
}

후기

mcu다룰때 죽어라 한게 비트연산이었는데 그거 1년 안했다고 푸는데 가물가물해서 인터넷 보면서 풀었다.
어마어마한 빡대가리다. 오늘도 나에게 감탄했다.