반응형
문제
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 |
반응형
'알고리즘(python) > 기본' 카테고리의 다른 글
[Python]동적계획법과 최단거리 역추적 백준 12852 (0) | 2020.03.09 |
---|---|
[Python]동적계획법3 백준 2098 (0) | 2020.02.29 |
[Python]동적계획법2 백준 2618 (0) | 2020.02.10 |
[Python]동적계획법2 백준 10942 (0) | 2020.02.09 |
[Python]동적계획법2 백준 7579 (0) | 2020.02.08 |
최근댓글