호기심 많은 분석가
[백준 11723] 집합 (Python) 본문
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
import sys
n = int(sys.stdin.readline().rstrip())
result = set()
for _ in range(n) :
com = sys.stdin.readline().split()
if len(com)==1 :
if com[0] == 'all' :
result = set([k for k in range(1, 21)])
else :
result = set()
else :
cd, x = com[0], int(com[1])
if cd == 'add' :
result.add(x)
elif cd == 'remove' :
result.discard(x)
elif cd == 'check' :
print(1 if x in result else 0)
elif cd == 'toggle' :
if x in result :
result.discard(x)
else :
result.add(x)
문제 내용 자체는 어렵지 않았지만, 메모리 초과가 계속 발생해서 엄청 고생했다.
연산의 수가 3백만까지 가능하기에 list에 담기에는 너무 메모리가 부족했고 보다 나은 set을 사용하였다. set타입의 경우 원소를 삭제할 때 remove와 discard 모두 가능한데, discard의 경우 원소가 집합안에 없으면 그냥 실행하지 않는 차이점이 있다. remove보다 조금 더 간단하였고, 모든 방법을 다 동원하였는데 Pypy3에서는 메모리 초과가 계속 발생하여 Python3으로 실행해보니까 메모리 초과가 해결되었다.
다른 훌륭한 분의 코드를 보며 작업했는데 덕분에 메모리를 줄일 수 있는 여러 방법들을 배울 수 있었다. :)
'Coding > Coding Test & Algorithm' 카테고리의 다른 글
[백준 1620] 나는야 포켓몬 마스터 이다솜 (Python) (4) | 2021.06.11 |
---|---|
[백준 1764] 듣보잡 (Python) (0) | 2021.06.09 |
[백준 9012] 괄호 (Python) (0) | 2021.06.04 |
[백준 2164] 카드 2 (Python) (0) | 2021.06.04 |
[백준 10816] 숫자 카드 2 (Python) (0) | 2021.06.03 |