백준 11723 ❓ (완)

CJB_ny·2023년 3월 12일
0

백준

목록 보기
101/104
post-thumbnail

11723


후기

틀렸습니다.가 계속 뜨는데 왜 뜨는지 이유를 모르겠음.

틀질코 생각을 좀 더 해야함.

비트연산자로 이래이래 쉽게 풀 수 있었다.

어떠한 상태값만을 빼기를 원할 때 remove부분처럼

ret &= ~(1 << n); // remove
ret ^= (1 << n); // toggle

비트를 반전시킨다음에 &연산자를 통해 딱 어떠한 상태값만을 빼버릴 수 있음.

이거 문제였던 부분이 empty랑 all일때는 n을 입력을 받으면 안된다.

cpp 코드

#include <bits/stdc++.h>
using namespace std;

#define endl "\n"

int n, m, ret;

int main()
{
	ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	cin >> m;
	string s;
	for (int i = 0; i < m; ++i)
	{
		cin.clear();
		cin >> s;
		if ( (s[0] != 'a' && s[1] != 'l')  || s[0] != 'e') cin >> n;
		
		if (s[0] == 'a' && s[1] == 'd') ret |= (1 << n);
		else if (s[0] == 'r') ret &= ~(1 << n);
		else if (s[0] == 'c') 
		{
			int v = (ret & (1 << n)) == 0 ? 0 : 1;
			cout << v << endl;
		}
		else if (s[0] == 't') ret ^= (1 << n);
		else if (s[0] == 'a' && s[1] == 'l') ret = (1 << 21) - 1;
		else if (s[0] == 'e') ret = 0;
	}
	
	return 0;
}
profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글