[BOJ_11723] 집합(python)

그냥·2024년 6월 7일
0

알고리즘

목록 보기
3/23

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

문제


코드

n = int(input())
r = 0
bitset = (1 << 21) - 1
for _ in range(n):
    c = input().strip().split()
    if c[0] == 'add':
        x = int(c[1])
        r |= (1 << x)
    elif c[0] == 'remove':
        x = int(c[1])
        r &= ~(1 << x)
    elif c[0] == 'check':
        x = int(c[1])
        print(1 if r & (1 << x) else 0)
    elif c[0] == 'toggle':
        x = int(c[1])
        r ^= (1 << x)
    elif c[0] == 'all':
        r = bitset
    else:
        r = 0

Idea 1

         or      and       xor
 x	y
 1	1	  1	      1         0
 1	0	  1	      0         1
 0	1	  1	      0         1
 0	0	  0	      0         0
#0 base
bitset = (1 << 21) - 1 : 	011111111111111111111
r = 0				   : 	000000000000000000000


#1 or연산 - 추가
r |= (1 << 2)		   : 	000000000000000000100 -> 2
r |= (1 << 3)		   : 	000000000000000001100 -> 6


#2 and연산 - 삭제
	r 		   		   : 	000000000000000001100 -> 6
~(1 << 3) 			   :	111111111111111110111
						  & ---------------------  
r &= ~(1 << 3)		   : 	000000000000000000100 -> 2


#3 xor연산 - toggle
	r 		   		   : 	000000000000000001100 -> 6
(1 << 3)			   :	000000000000000001000 -> 4
						  ^ ---------------------  
r ^= (1 << 3)		   : 	000000000000000000100 -> 2

0개의 댓글