반응형

   문제

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




매우 간단해 보이지만 연산수가 300만이다.

배열을 이용하여 구현하면 실패한다.

비트마스크의 사용이 필요하다.

비트마스크의 특징을 살펴보자.

https://codemcd.github.io/algorithm/Algorithm-%EB%B9%84%ED%8A%B8%EB%A7%88%EC%8A%A4%ED%81%AC/

빠르고 간결하며 더 작은 공간복잡도를 가지게 할수있다.

컴퓨터의 기본적인 연산인 AND,OR,XOR,NOT등을  알아야한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
T=int(sys.stdin.readline())
S=0
for _ in range(T):
    opcodeStr=sys.stdin.readline()
 
    opcode=opcodeStr.split()[0]
    if opcode=="add":#or 이용하여 해당비트가 0이라면 1로 만들어준다.
        S |= 1<<int(opcodeStr.split()[1])
    elif opcode=="remove":#and 를 이용하여 해당비트가 무엇이든간에 1로 만들어준다 not을 써주면 해당비트만 0으로 만들수있다.
        S &= ~(1<<int(opcodeStr.split()[1]))
    elif opcode=="check":#해당비트와 and 연산을 통해 0이라면 0을 1이라면 1을 반환한다.
        if S & (1<<int(opcodeStr.split()[1])):
            print(1)
        else:
            print(0)
    elif opcode=="toggle":#xor연산
        S ^= (1<<int(opcodeStr.split()[1]))
    elif opcode=="all":#모두 1로 만들어준다.
        S=(1<<21)-1
    elif opcode=="empty":#0으로 만들어준다.
        S=0

cs


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기