본문 바로가기
개발/Algorithm 문제 풀이

선택 안됨 [Python] 비트마스킹 - 11723 집합

by DenverAlmighty 2020. 8. 28.
반응형

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

 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

 

풀이 

:

add는 or 연산이므로 |= 

remove는 not 입력값과 and연산이므로 &= !(INPUT) 

toggle xor 연산이므로 ^= 

을 하면 된다.

 

1. Python

import sys
sett = 0
inpt = sys.stdin.readline
for _ in range(int(inpt())):
    comand = inpt().split()
    if comand[0] == 'add' :
        sett |= (1<<int(comand[1]))
    elif comand[0] == 'remove':
        sett &= ~(1<<int(comand[1]))
    elif comand[0] == 'check':
        if sett & (1<<int(comand[1])):
            print(1)
        else : print(0)
    elif comand[0] == 'toggle':
        sett ^= (1<<int(comand[1]))
    elif comand[0] == 'all':
        sett = (1<<21)-1
    elif comand[0] == 'empty':
        sett = 0

2. C++

#include <iostream>

using namespace std;

int main() {
	int N, val;
	string cmd;
	int sett = 0;

	ios::sync_with_stdio(0); cin.tie(0);
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> cmd;
		if (cmd == "add") {
			cin >> val;
			sett = sett | (1 << val);
		}
		else if (cmd == "remove") {
			cin >> val;
			sett &= ~(1 << val);
		}
		else if (cmd == "check") {
			cin >> val;
			if (sett & (1 << val)) cout << 1 << '\n';
			else cout << 0 << '\n';
		}
		else if (cmd == "toggle") {
			cin >> val;
			sett ^= (1 << val);
		}
		else if (cmd == "empty") sett = 0;
		else sett = (1 << 21) - 1;
	}
	return 0;
}
728x90
반응형