문제
https://www.acmicpc.net/problem/11723
주의사항
아래 코드는 C++에서 입출력 성능을 최적화하기 위한 코드로
추가해주지 않으면 시간초과 난다!
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
풀이
비트 마스크 써야하는 문제다
그냥 냅다 배열로 풀었더니 시간초과가 났다ㅎㅎ
<비트 연산>
AND | & | 비트 둘 다 1이여야만 1 |
OR | | | 비트 하나라도 1이면 1 |
XOR | ^ | 비트가 서로 다르면 1, 같으면 0 |
SHIFT | <<,>> | 비트를 좌우로 한칸씩 이동 |
NOT | ~ | 비트 반전 |
<구현>
ALL | bit = (1 << 21) - 1; | 1<<21은 1000...0000으로 1이 21번째 위치로 이동한 것이다. 여기서 1을 빼주면 모든 21 하위 비트가 1이 된다. |
EMPTY | bit=0; | bit가 0이되면 초기화! |
ADD | bit |= (1 << num); | |
REMOVE | bit &= ~(1 << num); | |
CHECK | bit & (1 << num) | num번째가 1이라면 1을 반환할 것이다! |
TOGGLE | bit ^= (1 << num); |
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//input,output속도 향상
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//VARIABLES
long long n; cin >> n;
int bit = 0;
int num;
string comd;
for (long long i = 0; i < n; i++)
{
cin >> comd;
if (comd == "all")
{
bit = (1 << 21) - 1;
continue;
}
else if (comd == "empty")
{
bit = 0;
continue;
}
cin >> num;
if (comd == "add")
{
bit |= (1 << num);
}
else if (comd == "remove")
{
bit &= ~(1 << num);
}
else if (comd == "check")
{
if (bit & (1 << num)) { cout << "1\n"; }
else { cout << "0\n"; }
}
else if (comd == "toggle")
{
bit ^= (1 << num);
}
}
}
'개발 > 백준' 카테고리의 다른 글
[백준] 11659번. 구간 합 구하기 4 (C++) (0) | 2024.11.19 |
---|---|
[백준] 17182번. 우주 탐사선 (C++) (0) | 2024.11.17 |
[백준] 1374번. 강의실 (C++) (0) | 2024.11.15 |
[SWEA] 1249번. 보급로 (C++) (4) | 2024.11.15 |
[백준] 2212번. 센서 (C++) (0) | 2024.11.14 |