import sys
input = sys.stdin.readline
m = int(input())
s = set()
for i in range(m):
cmd = str(input())
if 'all' in cmd:
s = set([_ for _ in range(1, 21)])
elif 'empty' in cmd:
s = set()
else:
op, x = cmd.split(' ')
x = int(x)
if 'add' == op:
s.add(x)
elif 'remove' == op:
s.discard(x)
elif "check" == op:
if x in s:
print(1)
else:
print(0)
elif "toggle" == op:
if x in s:
s.discard(x)
else:
s.add(x)
Python
복사
파이썬 메모리 관리
정리
•
일반적으로, set은 list보다 더 많은 메모리를 사용한다.
•
집합 문제에서는 입력된 값(원소)가 있는지 없는지 확인하는 게 핵심이다. 따라서 x in s 같은 연산이 자주 사용된다.
•
list 는 각 원소를 연속된 메모리 블록에 저장한다.
•
set 은 해시 테이블 기반의 자료구조고, 원소를 해시값을 이용해 저장한다. 따라서 중복을 허용하지 않고, 중복 검사를 자동으로 수행한다.
•
in 연산의 경우, list 에서는 선형 탐색으로 O(n) , set 에서는 해시 기반으로 (1) 이 된다.
⇒ 따라서, in 연산을 계속해서 사용하는 집합 문제에서는 set 의 성능이 압도적으로 좋다.
•
'all' in cmd: ← 경우에 따라서는 이런 연산도 성능 저하에 영향을 준다. 위 내용을 알았다면 처음부터 split() 으로 인풋을 받아서 사용했을 것이다.