[백준11723] 집합 (C++)

유후·2022년 5월 31일
0

백준

목록 보기
49/66

📌 문제

BOJ 바로가기

비트마스크 명령어를 구현하는 문제이다.

🗡 풀이

비트마스크 공부하기 싫어서 미뤄뒀었는데 오늘 공부해보니 의외로 재밌다!!!

✨ 집합 S에 N 추가

S = S | (1 << N)

✨ 집합 S에서 N 삭제

S = S & ~(1 << N)

✨ 집합 S에 N이 있는지 체크

S & (1 << N)

✨ 집합 S에 N 토글

S = S ^ (1 << N)

✨ 집합 S의 전체집합 구하기

{0, 1, ..., N} 집합은 다음과 같이 표현할 수 있다.
S = (1 << N + 1) - 1

✨ 공집합 만들기

S = 0

🚩 소스코드

#include <iostream>
using namespace std;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int m, s = 0;
	cin >> m;
	while (m--) {
		string command;
		int num;
		cin >> command;
		if (command == "add") {
			cin >> num;
			s = s | (1 << num);
		}
		else if (command == "remove") {
			cin >> num;
			s = s & ~(1 << num);
		}
		else if (command == "check") {
			cin >> num;
			if (s & (1 << num))
				cout << 1 << '\n';
			else
				cout << 0 << '\n';
		}
		else if (command == "toggle") {
			cin >> num;
			s = s ^ (1 << num);
		}
		else if (command == "all")
			s = (1 << 21) - 1;
		else if (command == "empty")
			s = 0;
	}
	return 0;
}
profile
이것저것 공부하는 대학생

0개의 댓글